1

私は基本的なプログラムを試していsetvbufます:

int main(int argc, char **argv) {

    FILE * fp;
    char buffer[1024];

    fp = fopen("~/my.txt", "w");

    setvbuf(fp, buffer, _IOFBF, sizeof(buffer));

    return EXIT_SUCCESS;
}

プログラムを実行すると、セグメンテーション違反が発生しましたsetvbuf:

Breakpoint 1, main (argc=0, argv=0x20) at ../my.c:13
13      int main(int argc, char **argv) {
(gdb) n
18              fp = fopen("~/my.txt", "w");
(gdb) n
20              setvbuf(fp, buffer, _IOFBF, sizeof(buffer));
(gdb) n

Program received signal SIGSEGV, Segmentation fault.
0x0000000000000000 in ?? ()

私の環境は次のとおりです。

$ uname -a
CYGWIN_NT-6.1 myhost 1.7.25(0.270/5/3) 2013-08-31 20:37 x86_64 Cygwin
$ gcc --version
gcc (GCC) 4.8.1
4

1 に答える 1

1

Oli のコメントPaul R のコメントで通知されたように、適切なエラー処理を追加しました。

fp = fopen("~/my.txt", "w");
if (fp == NULL)
  {
    perror ("The following error occurred");
    printf( "Value of errno: %d\n", errno );
    return EXIT_FAILURE;
  }

出力は次のとおりです。

The following error occurred: No such file or directory
Value of errno: 2

ファイル パスをフル パスに修正した後、呼び出しsetvbufは成功しました。

于 2013-09-23T08:36:11.307 に答える