回答編集履歴

1

修正コードの追加

2020/06/29 16:15

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -7,3 +7,107 @@
7
7
  文字列の終端の '\0' を検出したいのでしょうから、
8
8
 
9
9
  *str++ とか、*(str+i) すなわち str[i] を見ないといけないでしょう。
10
+
11
+
12
+
13
+ **追記**
14
+
15
+ 試したことのコードでは、str++ と i++ を同時に実行しているため、
16
+
17
+ *(str1+i) が変な文字を指すことになっています。
18
+
19
+
20
+
21
+ ```C
22
+
23
+ #include <stdio.h>
24
+
25
+
26
+
27
+ #define NUMBER 100
28
+
29
+
30
+
31
+ void strMix(char *str1,char *str2, char *str3);
32
+
33
+
34
+
35
+ int main(void)
36
+
37
+ {
38
+
39
+ char str1[NUMBER];
40
+
41
+ char str2[NUMBER];
42
+
43
+ char str3[NUMBER];
44
+
45
+
46
+
47
+ printf("入力:");
48
+
49
+ scanf("%s %s", str1, str2); // ★ scanf の書式の最後に \n をつけない
50
+
51
+
52
+
53
+ strMix(str1, str2, str3);
54
+
55
+
56
+
57
+ printf("出力:");
58
+
59
+ printf("%s\n", str3);
60
+
61
+
62
+
63
+ return 0;
64
+
65
+ }
66
+
67
+
68
+
69
+ void strMix(char *str1, char *str2, char *str3)
70
+
71
+ {
72
+
73
+ int i = 0;
74
+
75
+
76
+
77
+ while (*str1 != '\0' && *str2 != '\0') {
78
+
79
+ if (i % 2 == 0) {
80
+
81
+ *str3++ = *str1++;
82
+
83
+ }
84
+
85
+ else { // ★ if (i % 2 != 0) は無駄
86
+
87
+ *str3++ = *str2++;
88
+
89
+ }
90
+
91
+ i++;
92
+
93
+ }
94
+
95
+
96
+
97
+ while (*str1 != '\0') {
98
+
99
+ *str3++ = *str1++;
100
+
101
+ }
102
+
103
+ while (*str2 != '\0') {
104
+
105
+ *str3++ = *str2++;
106
+
107
+ }
108
+
109
+ *str3 = '\0';
110
+
111
+ }
112
+
113
+ ```