fscanf分段故障 - C.

时间:2016-11-15 16:49:27

标签: c segmentation-fault scanf

我在尝试使用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;
}

4 个答案:

答案 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] = {};