2012年7月21日土曜日

開発環境

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

コメントを投稿