3

C で可変長の 2 つの文字列をマージしようとしています。結果は、str1 の 1 番目の文字、str2 の 1 番目の文字、str1 の 2 番目の文字、str2 の 2 番目の文字などになります。もう一方の文字列の残り。

例えば:

str1 = "abcdefg";
str2 = "1234";

outputString = "a1b2c3d4efg";

私はCを初めて使用します。最初のアイデアは、両方の文字列を配列に変換してから、配列を反復処理することでしたが、もっと簡単な方法があるかもしれないと思いました. サンプルコードをいただければ幸いです。

更新: 以下の回答を実装しようとしました。私の関数は次のようになります。

void strMerge(const char *s1, const char *s2, char *output, unsigned int ccDest)
{
    printf("string1 is %s\n", s1);
    printf("string2 is %s\n", s2);

    while (*s1 != '\0' && *s2 != '\0')
    {
        *output++ = *s1++;
        *output++ = *s2++;
    }
    while (*s1 != '\0')
        *output++ = *s1++;
    while (*s2 != '\0')
        *output++ = *s2++;
    *output = '\0';

    printf("merged string is %s\n", *output);
}

しかし、コンパイル時に警告が表示されます。

$ gcc -g -std=c99 strmerge.c -o strmerge
strmerge2.c: In function ‘strMerge’:
strmerge2.c:41:5: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat]

そして、私がそれを実行してもうまくいきません:

./strmerge abcdefg 12314135
string1 is abcdefg
string2 is 12314135
merged string is (null)

引数 2 が int であると考えられるのはなぜですか? どうすればそれを char に修正できますか? printf の出力から「*」を削除すると、コンパイル エラーは発生しませんが、関数はまだ機能しません。

4

4 に答える 4