C 新手問, fclose() 時出 Segmentation fault

本帖最後由 azothterry 於 2010-11-16 15:14 編輯

各位大大, 我想寫一個可以儲起一些文字的 program
但唔知點解 RUN 到 putc(ch, outputFile); 就出 Segmentation fault,
應該點樣改? 請指教

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

int main(void)

{

        FILE *outputFile;
        char file_name[256];

        int ch;
        scanf("%s", file_name);
        flush_input_buffer();
        if (outputFile = fopen(file_name, "w") == NULL)
        {
         printf("Cannot open %s for writing.\n", file_name);
         return EXIT_FAILURE;
       }
        printf("Enter your input (Press Ctrl-D when done) ...\n");
        while ((ch = getc(stdin)) != EOF);
        {
        putc(ch, outputFile);
        }
        fclose(outputFile);
        printf("==== Ctrl-D pressed ==== \n");
        printf("Input saved to file %s\n", outputFile);
        return EXIT_SUCCESS;
}



void flush_input_buffer()
{
  while (getchar() != '\n')
{
        continue;
}
}

本帖最後由 edwinkcw 於 2010-11-16 20:09 編輯

我諗唔係fclose 出事
係你fclose 完又再call 佢

fclose(outputFile);
printf("==== Ctrl-D pressed ==== \n");
printf("Input saved to file %s\n", outputFile);

我諗你最尾係想出filename
printf("Input saved to file %s\n", 自己諗係乜);

TOP

我諗唔係fclose 出事
係你fclose 完又再call 佢

fclose(outputFile);
printf("==== Ctrl-D pressed ==== \ ...
edwinkcw 發表於 2010-11-16 20:08


依, 我係 run 到 putc(ch, outputFile); 出Segmentation fault哦

TOP

  1. if (outputFile = fopen(file_name, "w") == NULL)
複製代碼
  1. if ((outputFile = fopen(file_name, "w")) == NULL)
複製代碼

TOP

ntony 發表於 2010-11-16 23:56


唔明...可唔可以講白 d 呀?

TOP

回復 5# azothterry


將上面段code轉為下面段code

段seg fault好可能係因為你既operator priority錯左,次序變成:
1st. fopen(file_name, "w") == NULL
2nd. outputFile = true/false

因為==既priority係高過=

http://www.difranco.net/cop2220/op-prec.htm

TOP

本帖最後由 azothterry 於 2010-11-19 17:58 編輯

thx, 解決了
但出現左另一問題,
我用 putc( ch, outputFile) 儲存下的 text file 內容會看不到
但我用 fprintf(outputFile, "Message"); 是正常儲存的
不知錯了那裡

     25         if ((outputFile = fopen(file_name, "w")) == NULL)
     26         {
     27                 printf("Cannot open %s for writing.\n", file_name);
     28                 return EXIT_FAILURE;
     29         }
     30
     31         printf("Enter your input (Press Ctrl-D when done) ...\n");
     32
     33         while ((ch = getc(stdin)) != EOF);
     34         {
     35                 putc(ch, outputFile);
     36         }
     37         fprintf(outputFile,"Message\n");
     38         fclose(outputFile);
     39         
     40         printf("==== Ctrl-D pressed ==== \n");
     41         
     42         printf("Input saved to file %s\n", file_name);
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊

TOP


我用 putc( ch, outputFile) 儲存下的 text file 內容會看不到
azothterry 發表於 2010-11-19 17:09


     33         while ((ch = getc(stdin)) != EOF); /* 多了個分號;*/
     34         {
     35                 putc(ch, outputFile);
     36         }

TOP