使用sscanf进行分段错误

时间:2017-04-01 02:49:06

标签: c segmentation-fault scanf

在文件中,每行都以单词或制表符开头,例如:

这个测试

------选项卡//使用短划线,因为多个空格使其成为代码格式

不是标签

在我的循环中,我试图使用sscanf来获取每个单词。这是我的代码:

while(fgets(str, sizeof(str), file) != NULL) {
     if(str[0] == '\t') {
        char *test;
        sscanf(str, "%s", test);
     }
     // This following code gives the segmentation fault
     else {
          char *temp;
          sscanf(str, "%s", temp);
     }
}

我尝试在else中输出str,它是一个有效的str。

1 个答案:

答案 0 :(得分:2)

您的“temp”和“test”指针未初始化,因此任何sscanf()进入它们的尝试都会崩溃。

用静态数组替换它们(例如char temp[100];)或将它们指向已分配的内存(例如char *temp = malloc(100);,之后你需要free()),但要注意使用( s)由于dangerous的潜力,这样的扫描是buffer overflows