文字配列substring[#]
が[64]
に設定されている場合、ファイルは追加文字を出力します。追加文字は各コンパイルによって異なります。場合によってはes?
、時にはesx
などがあります。C無関係/宣言されていない変数が別の変数の出力に影響するのはなぜですか?
[64]
を他の番号(少なくとも試したもの:65、256,1 ..)に変更すると、正しく出力されるのはes
です。
私は、このファイル内の未使用/未申告の文字配列char newString[64]
を残す場合はさらに奇妙な、それも64
- どのように64の一見任意のサイズはアウトには影響しないと正しいサブ
es
を出力? - 完全に無関係な文字配列(
newString
)は、他の文字配列の出力にどのような影響を与えますか?
。
int main() {
char string[64];
char newString[64];
char substring[64];
fgets(string,64,stdin);
strncpy(substring, string+1, 1);
printf("%s\n", substring);
return 0;
}
'strncpy'の正しい使い方に注意してください。終了ゼロを付加しません。サブストリングを別のサブストリングから "抽出"すると思われるかのように見えます。 – usr2564301
プログラムに未定義の動作があります。あなたの質問の全前提は間違っています - UBの行動についての説明を求める要点はありません。あなたの質問は、私のコードのバグはどこにあるべきですか?その答えはおそらく 'strncpy(substring、string + 1、1)'です。 'string + 1'は文字列バッファ全体をスキップし、その後ろのバイトを指します。また、1バイトだけをコピーして文字列として印刷しようとします。 – kaylum
入力は何ですか? – chux