如何使用 fscanf 读取 c(Segmentation Fault) 中的文件?

How to use fscanf for reading files in c(Segmentation Fault)?

我是 Whosebug 的新用户。我用 c 写了这段代码,没有问题,输出是正确的。

#include <stdio.h>
#include <stdlib.h>

int main()
{
   char *str[10];
   FILE * fp;

   fp = fopen ("file.txt", "w+");
   fputs("We\nare\nin\n2016", fp);

   rewind(fp);

   fscanf(fp, "%s", str[0]);
   fscanf(fp, "%s", str[1]);              

   printf("Read String1 |%s|\n", str[0] );
   printf("Read String2 |%s|\n", str[1] );

   fclose(fp);

   return(0);
}

但是当我使用 char *str[15] 而不是 char *str[10] 时,结果是分段错误。怎么了?

指针 str[0]str[1] 未初始化。因此,您的程序具有 未定义的行为

要么您需要使用 malloc() 进行分配,要么使它们成为数组的数组(例如 str[2][256];),其长度足以容纳您从文件中读取的字符串。 无论如何,我个人会使用 fgets() 而不是 fscanf(),然后根据需要解析该行。

这也有助于对所有函数(fopen()、fscanf() 等)进行错误检查。

请记住,您正在声明 char * str[10],您正在为十个指针保留内存,但您没有调用 malloc 为这些指针的内容保留内存。

您的示例似乎与函数 fscanf 的本教程相似,http://www.tutorialspoint.com/c_standard_library/c_function_fscanf.htm

但是在那里,字符串部分被声明为 char[10] 而不是 char *[10] 这意味着它们已经为 10 个字符保留了内存。在同一个示例中,读取长度大于 10 的字符串也会产生问题。