我得到了一个分割错误的错误,而试图使用fscanf从一个文件读取到一个字符串,任何帮助将非常感谢。
int main()
{
char temp[100];
FILE *fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("error");
}
memset(temp, 0, strlen(temp));
while (fscanf(fp,"%s", temp)==1)
{
}
return 0;
}发布于 2016-11-15 16:58:25
strlen函数在以下方面做了一些工作:
int strlen(char *s)
{
int len = 0;
while(*s++) len++;
return len;
}换句话说,它将返回它遇到的第一个空字符的位置。如果您还没有初始化您的字符串,那么指针可能会从数组边界增加到进程内存的其他部分,以搜索空终止符(这使它成为分段错误)。
要解决此问题,请将memset的参数替换为sizeof(temp)。
发布于 2016-11-15 16:52:35
在对strlen(temp)的调用中,temp有未定义的内容。
相反,使用char temp[100] = {0};,而根本不使用memset。
发布于 2016-11-15 17:01:32
这是与strlen函数相关的问题,您可以这样修复它:
int main()
{
char temp[100];
FILE *fp = fopen("test.txt", "r");
if (fp == NULL)
{
printf("error");
}
memset(temp, 0, sizeof(temp)); //use sizeof instead of strlen is enough
while (fscanf(fp,"%s", temp)==1)
{
}
return 0;
}https://stackoverflow.com/questions/40615359
复制相似问题