读取文件时出现分段错误

时间:2012-02-03 05:41:43

标签: c segmentation-fault

我的文件如下:

123456789

我的代码给了我分段错误:

#include <stdio.h>

int main(){

    FILE *f; 
    char ch[5];
    f = open("a.txt", "r");
    fgets( ch, 4, f); 
    ch[4] = NULL;
    printf("%s", ch); //Fixed
    return 0;
}

我是一个绝对的初学者。我究竟做错了什么。我的目标是使用fgets读取文件的前4个字符。

4 个答案:

答案 0 :(得分:2)

你想做

    printf("%s", ch);

对于%格式,参数是指向字符的指针;通过按值传递单个字符,您告诉printf将该字符的ASCII值解释为指针,这将会对您产生影响;也就是说,如果字符是1,这是ASCII 49,那么它将在内存中查找字符串49以查找字符串 - 并且往下看通常是 verboten

但其次,我发现你正在呼叫open()而不是fopen()。您必须使用fopen(),否则您将无法获得FILE*

这两者都可能导致段错误 - 你需要修复它们。

答案 1 :(得分:2)

尝试使用“fopen”而不是“open”

感谢。

答案 2 :(得分:2)

快速变化。

  1. 我认为你想使用fopen而不是在这里打开,因为你使用了文件指针。
  2. 您需要将读取的字节数增加到5,最后一个由fgets终止为空。

     int main() {
    
         FILE *f; 
         char ch[5];
         f = fopen("a.txt", "r");
         fgets( ch, 5, f); 
         printf("%s", ch);
         return 0;
    
     }
    

答案 3 :(得分:0)

尝试使用

#include <stdio.h>

int main(){

    FILE *f; 
    char ch[5];
    f = fopen("a.txt", "r"); //use fopen
    fgets( ch, 4, f); 
    ch[4] = NULL;
    printf("%s", ch); // modification here pass the address of an array to printf
    return 0;
}

尝试以下来自已审阅网站的示例

/* fgets example */
#include <stdio.h>

int main()
{
   FILE * pFile;
   char mystring [5];

   pFile = fopen ("myfile.txt" , "r");
   if (pFile == NULL) perror ("Error opening file");
   else {
     if ( fgets (mystring , 5 , pFile) != NULL )
       puts (mystring);
     fclose (pFile);
   }
   return 0;
}

参考http://www.cplusplus.com/reference/clibrary/cstdio/fgets/

您也可以使用

fgetc() :Get character from stream (function)