我在尝试使用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;
}
答案 0 :(得分:3)
在对strlen(temp)
的调用中,temp
包含未定义的内容。
相反,请使用char temp[100] = {0};
,而不要使用memset
。
答案 1 :(得分:3)
strlen
函数在这些方面做了一些事情:
int strlen(char *s)
{
int len = 0;
while(*s++) len++;
return len;
}
换句话说,它将返回遇到的第一个空字符的位置。如果你还没有初始化你的字符串,那么指针可能会从数组范围中增加到进程的其他部分'搜索空终止符的内存(使其成为段错误)。
要解决此问题,请将memset
的参数替换为sizeof(temp)
。
答案 2 :(得分:1)
这是与strlen功能相关的问题,您可以这样解决:
uint16_t
答案 3 :(得分:-2)
摆脱memset(temp, 0, strlen(temp));
将char temp[100];
替换为char temp[100] = {};