写这个文件句柄有什么问题?

时间:2010-10-12 15:24:24

标签: c file-io segmentation-fault

#include<stdio.h>
#include<ctype.h>

int main() {

    FILE *fpin = fopen("in.txt", "r");
    fprintf(fpin, "hello, world!");
    fclose (fpin);

    char c;
    fpin = fopen("in.txt", "r");
    FILE *fpout = fopen("out.txt", "w");
    while ((c = fgetc(fpin)) != EOF) {
        fputc (toupper(c), fpout);
    }

    fclose (fpout);
    fclose (fpin);
    return 0;
}

我正在

  

分段错误

谢谢。

4 个答案:

答案 0 :(得分:10)

我对C一无所知,但似乎你写的是一个你已经打开的文件......

FILE *fpin = fopen("in.txt", "r"); 
fprintf(fpin, "hello, world!"); 

应该是:

FILE *fpin = fopen("in.txt", "w"); 
fprintf(fpin, "hello, world!"); 

答案 1 :(得分:4)

他们首先发现的问题是你没有检查fopen电话是否成功。它可能会失败并导致fpin为NULL,这将导致稍后在代码中出现问题。

FILE *fpin = fopen("in.txt", "r"); 
if (!fpin) { 
  printf("Error opening in.txt");
  return EXIT_FAILURE;
}

答案 2 :(得分:3)

  1. 将您的char c;更改为int c; - fgetc返回一个int。
  2. 检查对fopen的调用的返回值,看看是否收到NULL返回。
  3. 将第一个fopen的模式更改为"w",以便您可以写入该文件。
  4. 您可以考虑在\n
  5. 的末尾添加"hello world!"

答案 3 :(得分:1)

最有可能的一个fopen来电失败并返回NULL。最有可能的候选人是以下几行:

FILE *fpin = fopen("in.txt", "r");

您可能打算在此处使用"w",因为您稍后会尝试写入该文件。我猜这个文件还不存在......因此,当你尝试用"r"打开它时,fopen调用失败。