回答編集履歴

4

追記

2017/10/03 06:49

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -159,3 +159,7 @@
159
159
  }
160
160
 
161
161
  ```
162
+
163
+
164
+
165
+ 文字列がヌル終端していることが前提ですが。

3

追記

2017/10/03 06:49

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -121,3 +121,41 @@
121
121
 
122
122
 
123
123
  こっちの方が配列で慣れ親しんでいる分直感的ですね。
124
+
125
+
126
+
127
+ ついでに
128
+
129
+ ---
130
+
131
+ 以下の三つはいずれも正解。
132
+
133
+ ```C
134
+
135
+ for(size_t j = 0; j<5; j++){
136
+
137
+ printf("%c\n", str[j]);
138
+
139
+ }
140
+
141
+ ```
142
+
143
+ ```C
144
+
145
+ for(size_t j = 0; str[j] != '\0'; j++){
146
+
147
+ printf("%c\n", str[j]);
148
+
149
+ }
150
+
151
+ ```
152
+
153
+ ```C
154
+
155
+ for(char *tmp = str; *tmp != '\0'; tmp++){
156
+
157
+ printf("%c\n", *tmp);
158
+
159
+ }
160
+
161
+ ```

2

追記

2017/10/03 06:48

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -86,4 +86,38 @@
86
86
 
87
87
 
88
88
 
89
+ ---
90
+
89
- 特に三行目(**太字**)は要注意です。
91
+ 特に上記の三行目(**太字**)は要注意です。この部分ですね。
92
+
93
+ > ```C
94
+
95
+ > printf("%c\n",str+j);
96
+
97
+ > ```
98
+
99
+
100
+
101
+ `str`に格納されているのはアドレスなので、`%c`で出力すると想定外の結果となります。
102
+
103
+ ちゃんと指し示すデータを参照する必要があります。
104
+
105
+ ```C
106
+
107
+ printf("%c\n", *(str+j));
108
+
109
+ ```
110
+
111
+
112
+
113
+ これは、次のようにも書くことができます。
114
+
115
+ ```C
116
+
117
+ printf("%c\n", str[j]);
118
+
119
+ ```
120
+
121
+
122
+
123
+ こっちの方が配列で慣れ親しんでいる分直感的ですね。

1

修正

2017/10/03 06:44

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -24,6 +24,8 @@
24
24
 
25
25
  }
26
26
 
27
+ a[2][5] = '\0';
28
+
27
29
  func(max,a[2]);
28
30
 
29
31
  return 0;
@@ -38,11 +40,13 @@
38
40
 
39
41
  while(j<5){
40
42
 
41
- printf("%c\n",str+j);
43
+ printf("%c\n", str[j]);
42
44
 
43
45
  j++;
44
46
 
45
47
  }
48
+
49
+ printf("%s\n", str);
46
50
 
47
51
  }
48
52
 
@@ -50,4 +54,36 @@
50
54
 
51
55
 
52
56
 
57
+ **実行結果**
58
+
59
+ ```
60
+
61
+ b
62
+
63
+ b
64
+
65
+ b
66
+
67
+ b
68
+
69
+ b
70
+
71
+ bbbbb
72
+
73
+ ```
74
+
75
+
76
+
77
+ **他に修正すべきだったところ**
78
+
53
- ついでにfuncのプロトタイプ宣言も足しました。
79
+ funcのプロトタイプ宣言の追加
80
+
81
+ ・文字配列の終端にヌル文字を追加
82
+
83
+ ・**func内でのstrの参照方法の変更**
84
+
85
+ ・ついでに文字列としても出力してみた
86
+
87
+
88
+
89
+ 特に三行目(**太字**)は要注意です。