问题描述
- 用指针对字符串排序的问题,内存访问非法(续)
-
还是上次类似的问题,求解答。
对字符串进行排序的问题,被指针搞糊涂了。#include<stdio.h> #include<string.h> #include<stdlib.h> int main() { void sort(char p[][5]); char ss[10][5]={"worin","trafi","panda","dalai","lama2","strin","tende","racof","lenth","recte"}; sort(ss); printf("test"); } void sort(char p[][5]) { int i,j,k; int n=10; char temp[20]; for(i=0;i<n-1;i++) { k=i; for(j=i+1;j<n;j++) if(strcmp(p[k],p[j])>0) k=j; if(k!=i) { strcpy(temp,p[k]); //本意是想复制第k个字符串,但此处将多个字符串进行复制 strcpy(p[k],p[i]); //程序运行到此出错,又是内存访问非法,头痛 strcpy(p[i],temp); } } }
解决方案
这个变量 char ss[10][5] 的定义,至少需要修改为: char ss[10][6]。就是比实现的最大字符串的长度 + 1.
否则,按字符串操作时,因为没有字符串结束符导致操作越界。
解决方案二:
确认i和k没有越界,并保证数组长度能够容纳拷贝内容
解决方案三:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
void sort(char p[][10]);
char ss[10][10]={"worin","trafi","panda","dalai","lama2","strin","tende","racof","lenth","recte"};
sort(ss);
printf("test");
}
void sort(char p[][10])
{
int i,j,k;
int n=10;
char temp[20];
for(i=0;i<n-1;i++)
{
k=i;
printf("%s n",p[i]);
for(j=i+1;j<n;j++)
if(strcmp(p[k],p[j])>0)
k=j;
if(k!=i)
{
strcpy(temp,p[k]); //本意是想复制第k个字符串,但此处将多个字符串进行复制
strcpy(p[k],p[i]); //程序运行到此出错,又是内存访问非法,头痛
strcpy(p[i],temp);
}
}
}
时间: 2024-08-01 22:32:21