段访问异常

来源:百度知道 编辑:UC知道 时间:2024/06/18 03:41:30
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

main()
{
char*c[100];
scanf("%s",&c);
char*a;
for(int i=0;i<strlen(*c);i++)
{
a=c[i];
printf("\t%s",a);
}
system("pause");
}

为什么产生段访问异常?怎么解决?
功能:*c[100]是字符串指针数组,用a获得数组中每个字符串输出,一楼2楼的不符合要求

用二维数组,或给指针开辟空间
char *c[100];
for(i=0;i<100;i++){
c[i]=(char*)malloc(sizeof(char))*N);
scanf("%s",c[i]);
}

其中N自己定义大小就可以了。

原因:数组越界、堆栈溢出、指针非法访问。

把程序改写成这样:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
char c[100];
scanf("%s", c);
char*a;
int i;
for(i=0;i<strlen(c);i++)
{
a = &c[i];
printf("\t%s",a);
}
system("pause");
return 0;
}

不知道你想干什么,如果你想直接拷贝的话,你可以用Strcpy,你的char*[100]也应该声明成 char c[100];吧? 改一下吧
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
char c[100];
scanf("%s",c);
char *a;
int s = strlen(c);
for(int i=0; i<s; i++)
{
a = &c[i];
printf("\t%s\n",a);
}
system(