2012年5月10日木曜日

開発環境

『実践プログラミング 第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 コメント:

コメントを投稿