在文件中,每行都以单词或制表符开头,例如:
这个测试
------选项卡//使用短划线,因为多个空格使其成为代码格式
不是标签
在我的循环中,我试图使用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。
答案 0 :(得分:2)
您的“temp”和“test”指针未初始化,因此任何sscanf()进入它们的尝试都会崩溃。
用静态数组替换它们(例如char temp[100];
)或将它们指向已分配的内存(例如char *temp = malloc(100);
,之后你需要free()
),但要注意使用( s)由于dangerous的潜力,这样的扫描是buffer overflows。