開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの無料、light版)
- 言語: C
- コンパイラ: UNIX ccコンパイラ (汎用UNIX)
『実践プログラミング 第3版』 (Steve Oualline (著)、 望月 康司 (監修) (翻訳)、 谷口 功 (翻訳)、 オライリー・ジャパン、1998年、ISBN978-4900900646) の13章(単純なポインタ)13.9(関数の設計)設問13-2を解いてみる。
設問13-2.
実際には
Name: tmp2 Name: tmp2
と出力される。2回目のtmp_nameの呼び出しで、nameが上書きされるから。ということで、上書きされる前にコピーするようにプログラムを修正すれば意図通りの出力結果になる。
修正
コード(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;
char *name2;
char name11[30];
char name22[30];
name1 = tmp_name();
strcpy(name11,name1);
name2 = tmp_name();
strcpy(name22,name2);
printf("Name1: %s\n", name11);
printf("Name2: %s\n", name22);
return (0);
}
入出力結果(Terminal)
$ cc -g -o sample sample.c $ ./sample Name1: tmp1 Name2: tmp2 $
まだまだポインタの理解があいまい。。だけど思った通りに動いた。
0 コメント:
コメントを投稿