2013年11月25日月曜日

開発環境

C実践プログラミング 第3版 (Steve Oualline (著)、 望月 康司 (監訳) (翻訳)、谷口 功 (翻訳)、オライリー・ジャパン)のⅡ部(単純なプログラミング)の13章(単純なポインタ)、13.1(ポインタ)、13.2(関数引数としてのポインタ)、13.3(constポインタ)、13.4(ポインタと配列)、13.5(ポインタを使用しない方法)、13.6(ポインタを使用した文字列分割)、13.6(ポインタを使用した文字列分割)、13.7(ポインタと構造体)、13.8(コマンド業引数)、設問 13-2を解いてみる。

その他参考書籍

設問 13-2.

name1、name2にnameへのポインタが代入される。そのとき、2回目のtemp_nameの呼び出しで、nameの値はtemp2になっている。name1もnameの値、temp2を指していることになるので、出力結果は、

Name: tmp2
Name: tmp2
となる。

確認。

入出力結果(Terminal)

$ make
cc -g -o sample sample.c
$ ./sample
Name1: tmp2
Name2: tmp2
$

意図した出力結果を得るには、name1,、name2をポインタではなく配列にして、nameの値を書き換える前に、値を代入しておいてから出力すればいい。

修正。

コード

sample.c

#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;
    
    name1 = tmp_name();
    printf("Name1: %s\n", name1);
    name2 = tmp_name();
    printf("Name2: %s\n", name2);
    return (0);
}

makefile

CC=cc
CFLAGS=-g

sample: sample.c
 $(CC) $(CFLAGS) -o sample sample.c

clean:
 rm -f sample

入出力結果(Terminal)

$ make
cc -g -o sample sample.c
$ ./sample
Name1: tmp1
Name2: tmp2
$

0 コメント:

コメントを投稿