私はUbuntuの14.04とgccを使用しています4.8.4C:のscanf文で文字を読む返しごみ値
#include<stdio.h>
void main()
{
char c[15];
printf("enter a character\n");
scanf("%15c",c);
printf("%s\n",c);
}
出力:
enter a character
qwertyuiopasdfghjkl
qwertyuiopasdfg
私は15以上の文字で、上記プログラムを実行します入力として、出力はガベージ値を返しません。しかし、私は以下のプログラムを実行するとき:
#include<stdio.h>
void main()
{
char c[5];
printf("enter a character\n");
scanf("%5c",c);
printf("%s\n",c);
}
私は5文字以上の入力を与えています。ガベージ値を含む出力を返します。
問題は、 '%15c'と'%5c'で読み取られた値がヌルで終了していないため、両方のコードに未定義の動作があることです。 –
'main()'の戻り値の型は常に 'int'であり、決して' void'ではありません。これがここの中心的な問題ではない –
@JohnBollinger中心的な問題ではありませんが、Cでは 'main()'を "または他の実装定義の方法で許可します。" C11§5.1.2.2.11 – chux