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 の出力から「*」を削除すると、コンパイル エラーは発生しませんが、関数はまだ機能しません。