teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

修正コードの追加

2020/06/29 16:15

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -2,4 +2,56 @@
2
2
  main の中の配列の要素を指しています。
3
3
  ++ しようが、+i しようがポインタの値が 0 になることはありません。
4
4
  文字列の終端の '\0' を検出したいのでしょうから、
5
- *str++ とか、*(str+i) すなわち str[i] を見ないといけないでしょう。
5
+ *str++ とか、*(str+i) すなわち str[i] を見ないといけないでしょう。
6
+
7
+ **追記**
8
+ 試したことのコードでは、str++ と i++ を同時に実行しているため、
9
+ *(str1+i) が変な文字を指すことになっています。
10
+
11
+ ```C
12
+ #include <stdio.h>
13
+
14
+ #define NUMBER 100
15
+
16
+ void strMix(char *str1,char *str2, char *str3);
17
+
18
+ int main(void)
19
+ {
20
+ char str1[NUMBER];
21
+ char str2[NUMBER];
22
+ char str3[NUMBER];
23
+
24
+ printf("入力:");
25
+ scanf("%s %s", str1, str2); // ★ scanf の書式の最後に \n をつけない
26
+
27
+ strMix(str1, str2, str3);
28
+
29
+ printf("出力:");
30
+ printf("%s\n", str3);
31
+
32
+ return 0;
33
+ }
34
+
35
+ void strMix(char *str1, char *str2, char *str3)
36
+ {
37
+ int i = 0;
38
+
39
+ while (*str1 != '\0' && *str2 != '\0') {
40
+ if (i % 2 == 0) {
41
+ *str3++ = *str1++;
42
+ }
43
+ else { // ★ if (i % 2 != 0) は無駄
44
+ *str3++ = *str2++;
45
+ }
46
+ i++;
47
+ }
48
+
49
+ while (*str1 != '\0') {
50
+ *str3++ = *str1++;
51
+ }
52
+ while (*str2 != '\0') {
53
+ *str3++ = *str2++;
54
+ }
55
+ *str3 = '\0';
56
+ }
57
+ ```