# (c言語)変な文字が出力される。

 状況

printfで出力した際に最後の方に変な文字(,�,p���U)が出力された。

原因

printf("%s")で終わりが見つからず領域外の文字まで出力している。

<詳細>

printf("%s")は'\0'を見つけたら終わるという仕組みになっているが、配列を作る際にchar a[10]のようにすると、aの領域を確保しただけで、'\0'を最後に入れるといった処理はしていない(char a="abcd"とやった際にはdの後ろに'\0'が含まれる。)。そのため、a[10]の状態でprintf("%s",a)をすると、終わりの記号が見当たらないので、領域外の文字も出力してしまう。

<いつ終わるのか>

ここで疑問になるかもしれないが、じゃあいつ終わるのかという点である。 領域外の文字を出力している際に領域外にたまたま'\0'が存在すると「あ、終わりあったわ」という感じで終われる。この際に'\0'を見つけるまでに変な文字があるとその変な文字を出力してしまうということである。

解決策

print("%s",a)で出力する配列aの最後に'\0'を追加す