単純な文字列連結プログラムを書いています。
プログラムは私が投稿した方法で動作します。ただし、最初に次のコードを使用して文字列の末尾を検索するように記述しました。
while (*s++)
;
しかし、その方法はうまくいきませんでした。渡した文字列が正しくコピーされませんでした。具体的には、「\0」を保持する char[] 変数に「abc」をコピーしようとしました。
C K&Rの本を読むと、うまくいくようです。そのコンパクトなフォームは、次の手順を実行する必要があります。
- *s は '\0' と比較されます
- s は次のアドレスを指します
では、なぜうまくいかないのでしょうか。Debian で gcc を使用してコンパイルしています。
このバージョンが機能することがわかりました:
strncat(char *s, const char *t, int n)
{
char *s_start = s;
while (*s)
s++;
for ( ; n > 0 && *t; n--, s++, t++)
*s = *t;
*(s++) = '\0';
return s_start;
}
前もって感謝します。