C言語: puts関数はNULL文字(\0)で改行される
auです。
今回は「puts関数」を使用していた際に、改行しようとしていないのに改行されているので、どんな風に処理されているのだろうと思い調べてみました。
puts関数
#include <stdio.h> int puts(char* s)
サンプル
#include <stdio.h> #include <string.h> int main(void) { char c[] = "Hello"; char c1[5]; puts("hello"); // 1 puts("world\n"); // 2 puts(""); // 3 puts("My name is au."); // 4 puts("1"); // 5 strcpy(c1, c); puts(c1); // 6 return 0; } // 実行結果 hello world My name is au. 1 Abort trap: 6
puts関数は、sに代入された文字列を出力します。
出力する際に、文字列の後ろについているNULL文字(\0)は"\n"に変換されるため、勝手に改行されるような挙動になります。
3番: ""(ダブルクォーテーション)のみでも改行されました。
4番: scanfと違い、空白で改行されずに出力されました(scanfで空白で改行せずに出力する方法)
5番: puts(1)のようにすると、コンパイルでwarningが出ました。実行も"Segmentation fault: 11"となってしまいます。
6番: NULL文字がなくなるとどうなるのか気になり、NULL文字が入らない大きさの変数にstrcpyで実行した結果「Abort trap: 6」という結果が表示されました。
これについて調べてみると、配列の大きさを超えて代入してしまっているため、このような結果が表示されるそうです。