K&R 演習1-2 解答 (プログラミング言語C 第2版)

スポンサーリンク

鍛錬 2

K&R 演習1-2 解答 (プログラミング言語C 第2版)

x が上にあげなかったある文字であるとして,printf の引数に \x を含めるとどうなるかを調べる実験を行なえ。

B.W.カーニハン D.M.リッチー 石田晴久 訳 『プログラミング言語C 第2版 ANSI 規格準拠』, (共立出版, 2017), pp.10.

スポンサーリンク

プログラム

pp.10 の時点でまだ登場していないライブラリ関数などはできる限り使用しないようにし、本書中で作成した関数を使用するようにしています。
記述方法について、できる限り pp.10 時点での記載通りにしています。

以下は、改行 \n を \x に変更するプログラム、kr_1_2.c です。

#include <stdio.h>

int main(void)
{
	printf("hello, world\x");
	
	return 0;
}
スポンサーリンク

実行結果

以下は、プログラム kr_1_2.c を実行しています。

***@ubuntu:~/***/test$ 
***@ubuntu:~/***/test$ gcc kr_1_2.c -Wall -Wextra -o kr_1_2
kr_1_2.c: In function ‘main’:
kr_1_2.c:8:9: error: \x used with no following hex digits
  printf("hello, world\x");
         ^

 
上記に示した通り、コンパイルの際にエラーとなります。これは、\x が16進数のエスケープシーケンスであるためです。

スポンサーリンク

プログラム(変更後)

以下のプログラム kr_1_2.c は、例として N を表示するために、asciiコードの 0x4e を記述しています。

実行すると、hello,world に N が付加され、hello,worldN と表示されます。

#include <stdio.h>

int main(void)
{
	printf("hello, world\x004e");
	
	return 0;
}
スポンサーリンク

実行結果(変更後)

以下は、プログラム kr_1_2.c を実行しています。

***@ubuntu:~/***/test$ 
***@ubuntu:~/***/test$ gcc kr_1_2.c -Wall -Wextra -o kr_1_2
***@ubuntu:~/***/test$ ./kr_1_2
hello, worldN
タイトルとURLをコピーしました