開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料、light版)
- 言語: C
- コンパイラ: UNIX ccコンパイラ (汎用UNIX)
『実践プログラミング 第3版』 (Steve Oualline (著)、 望月 康司 (監修) (翻訳)、 谷口 功 (翻訳)、 オライリー・ジャパン、1998年、ISBN978-4900900646) II部(単純なプログラミング)の13章(単純なポインタ)13.8(コマンドライン引数)設問13-2を解いてみる。
設問13-2.
name1もname2も変数nameをポイントするポインタで、その変数nameの値はというと、関数が2回呼び出されているのでtmp2という値になっているから、実際には両方ともtmp2が表示される。
ポインタを代入するのではなく、値をコピーするようにすれば良い。
修正
コード(TextWrangler)
#include <stdio.h> #include <string.h> char *tmp_name(void){ static char name[30]; static int sequence = 0; ++sequence; strcpy(name,"tmp"); name[3] = sequence + '0'; name[4] = '\0'; return(name); } int main(){ char *tmp_name(void); char name1[100]; char name2[100]; strcpy(name1, tmp_name()); strcpy(name2, tmp_name()); printf("Name: %s\n", name1); printf("Name: %s\n", name2); return (0); }
入出力結果(Terminal)
$ cc -g -o sample sample.c $ ./sample Name: tmp1 Name: tmp2 $
0 コメント:
コメントを投稿