0
#include <stdio.h>

int main(void){

char a;
scanf("%s", &a);

return 0;
}

私にとってはうまくいきますが、他のコンテキストでは予期しない結果が生じるのではないかと思います.

4

2 に答える 2

2

たとえば、このコードを見てください -

#include <stdio.h>

int main(void){

    char a;
    char b = '1';
    char c = '1';
    scanf("%s", &a);

    printf("%c = %c\n", b, c);
    return 0;
}

あなたはそれが印刷されることを期待するでしょうが1 = 1、今私がそれを実行したとき、それは印刷され= 1ました(少なくとも私のコンパイラでは、それから安定したものは何も期待しないでください)

scanf は a のアドレスに文字列を書き込み、そこに十分なスペースが割り当てられていることを期待します (この場合は間違っています)。この文字列には入力 char と null ターミネータが含まれます。私の場合、nullターミネータは他のメモリを上書きします-bのメモリです。これは未定義の動作です - そうしないでください (少なくとも意味があると期待している間は)。

于 2013-09-24T13:08:10.570 に答える