質問: *str2++; } } に変更してみたのですが、出力がおかしくなってしましました。 自分ではこれ以上、どこを直せば良いのか分かりません。 実行結果 出力:axbycd・ ### 補足情報(FW/ツールのバージョンなど) サクラエディタ、コマンドプロンプト for VS 2019を使用しています。
回答: strMix の中の str1、str2、str3 はポインタで、 main の中の配列の要素を指しています。 ++ しようが、+i しようがポインタの値が 0 になることはありません。 文字列の終端の '\0' を検出したいのでしょうから、 *str++ とか、*(str+i) すなわち str[i] を見ないといけないでしょう。 **追記** 試したことのコードでは、str++ と i++ を同時に実行しているため、 *(str1+i) が変な文字を指すことになっています。 ``` #include #define NUMBER 100 void strMix(char *str1,char *str2, char *str3); int main(void) { char str1[NUMBER]; char str2[NUMBER]; char str3[NUMBER]; printf("入力:"); scanf("%s %s", str1, str2); // ★ scanf の書式の最後に \n をつけない strMix(str1, str2, str3); printf("出力:"); printf("%s\n", str3); return 0; } void strMix(char *str1, char *str2, char *str3) { int i = 0; while (*str1 != '\0' && *str2 != '\0') { if (i % 2 == 0) { *str3++ = *str1++; } else { // ★ if (i % 2 != 0) は無駄 *str3++ = *str2++; } i++; } while (*str1 != '\0') { *str3++ = *str1++; } while (*str2 != '\0') { *str3++ = *str2++; } *str3 = '\0'; } ```