1. ホーム
  2. c

[解決済み] printf()の実行とセグメンテーションフォールト

2022-02-02 23:30:47

質問事項

#include<stdio.h>

int main()
{
    char *name = "Vikram";
    printf("%s",name);
    name[1]='s';
    printf("%s",name);
    return 0;
}

ターミナルには何も出力されず、segmentation faultが表示されるだけです。しかし、GDBで実行すると、以下のようになります。

Program received signal SIGSEGV, Segmentation fault.
0x0000000000400525 in main () at seg2.c:7
7       name[1]='s';
(gdb) 

これは、7行目でSEGフォールトを受けたことを意味します(明らかに、定数char配列に書き込むことはできません)。では、なぜ6行目のprintf()が実行されないのでしょうか?

解決方法は?

のストリームバッファリングが原因です。 stdout . を実行しない限り fflush(stdout) または、改行を表示する "\n" の場合、出力はバッファリングされる可能性があります。

この場合、バッファをフラッシュして印刷する前にセグメンテーションで失敗しています。

代わりにこれを試してみてください。

printf("%s",name);
fflush(stdout);        //  Flush the stream.
name[1]='s';           //  Segfault here (undefined behavior)

または

printf("%s\n",name);   //  Flush the stream with '\n'
name[1]='s';           //  Segfault here (undefined behavior)