2

ポインターの演習として、文字列連結関数を作成しました。

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

うまくいくようです:

main()
{
    char *s = "Hello, ";
    char *t = "world!";

    strcat(s,t);
    printf("%s\n", s);

    return 0;
}

期待どおりに生成Hello, world!されます。しかし、望ましくないことも起こり、文字列tポイントを に出力しますorld!strcat変更できませんでしたt。代わりに、文字列が移動したようです。tstrcat の後にデクリメントしてから出力すると、正しい文字列が得られます。

弦を動かしたのは何ですか?strcatそれでなければなりませんが、何が問題なのかわかりません。

それが重要な場合は、tcc バージョン 0.9.26 (x86-64 Win64) でコンパイルされています。

4

3 に答える 3