2013年11月24日日曜日

開発環境

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

その他参考書籍

設問 13-1.

コード

sample.c

#include <stdio.h>
#include <string.h>

char *tmp_name(void)
{
    /* nameは一時変数なので、関数を呼び出したらnameへのポインタを返す。
     * その後、アドレスにあるものは消去されてしまう。
     * 消去されずに、問題のように出力させるよう、
     */
    // char name[30];
    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);
    int i;
    
    for (i = 0; i < 5; i += 1){
        printf("Name: %s\n", tmp_name());
    }
    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
Name: tmp1
Name: tmp2
Name: tmp3
Name: tmp4
Name: tmp5
$

0 コメント:

コメントを投稿