2013年5月2日木曜日

開発環境

プログラミング言語C 第2版 ANSI規格準拠 (B.W. カーニハン D.M. リッチー (著)、 石田 晴久 (翻訳)、共立出版)の第5章(ポインタと配列)、5.5(文字ポインタと関数)、演習5-3、5-4を解いてみる。

その他参考書籍

演習 5-3.

コード

sample.c

#include <stdio.h>

void my_strcat(char *s, char *t);

int main()
{
    char s[] = "Hello, ";
    char t[] = "Pointer!";
    my_strcat(s, t);
    printf("%s\n", s);
    return 0;
}

void my_strcat(char *s, char *t)
{
    while (*s)
        s++;
    while (*s++ = *t++)
        ;
}

入出力結果(Terminal)

$ ./a.out
Hello, Pointer!
Abort trap: 6
$

とりあえず第1引数の文字列に第2引数を付加することは出来たけど、最後のAbort trap: 6っていう出力結果の意味って何だろう。。gccでコンパイルして実行したら特に何も出力されなかったし、コンパイラで何か違いがあるのかなぁ〜

演習 5-4.

コード

sample.c

#include <stdio.h>

int strend(char *s, char *t);

int main()
{
    char s1[] = "python";
    printf("%d, %d, %d, %d, %d, %d\n",
        strend(s1, "n"), strend(s1, "on"),
        strend(s1, "pytho"), strend(s1, ""),
        strend("", s1), strend("", ""));
    return 0;
}

int strend(char *s, char *t)
{
    char *ps = s;
    char *pt = t;
    
    while (*s)
        s++;
    while (*t)
        t++;
    
    while (*s == *t) {
        if (ps == s || pt == t)
            break;
        s--;
        t--;
    }
    
    if(*s == *t && t == pt && s != '\0')
        return 1;
    return 0;
}

入出力結果(Terminal)

$ ./a.out
1, 1, 0, 1, 0, 1
$

0 コメント:

コメントを投稿