回答編集履歴

3

追記

2017/10/24 00:43

投稿

退会済みユーザー
test CHANGED
@@ -111,3 +111,59 @@
111
111
  }
112
112
 
113
113
  ```
114
+
115
+ ---
116
+
117
+ 追記:
118
+
119
+
120
+
121
+ エラーの内容は文字と文字列を同様に扱おうとしているという型に関する警告ですが、"a"が`char [2]`となっているのは、文字列"a"が、`a`と`\0`の2文字から構成されているためです。
122
+
123
+ 固定文字列に対してはあまり行うことはないかもしれませんが、文字列の1文字目である`a`を使用したい場合は下記のように参照することも可能です。
124
+
125
+
126
+
127
+ ```c
128
+
129
+ #include <stdio.h>
130
+
131
+ #include <stdlib.h>
132
+
133
+
134
+
135
+ #define MAX 256
136
+
137
+
138
+
139
+ int main(void)
140
+
141
+ {
142
+
143
+ char str[MAX + 1];
144
+
145
+ int i;
146
+
147
+
148
+
149
+ for (i = 0; i < MAX; i++)
150
+
151
+ {
152
+
153
+ str[i] = "a"[0];
154
+
155
+ }
156
+
157
+ str[i] = '\0';
158
+
159
+
160
+
161
+ printf("%s\n", str);
162
+
163
+
164
+
165
+ return 0;
166
+
167
+ }
168
+
169
+ ```

2

試してみたらNULL代入は怒られたので削除

2017/10/24 00:42

投稿

退会済みユーザー
test CHANGED
@@ -1,4 +1,4 @@
1
- 他の方のご回答ように、まずは文字と文字列の違いを理解することが大切です。
1
+ 他の方のご回答にもあるように、まずは文字と文字列の違いを理解することが大切です。
2
2
 
3
3
  C言語では、1文字はchar型の値を、文字列は最後が終端文字`\0`で終わるchar型の配列として扱います。
4
4
 
@@ -38,7 +38,7 @@
38
38
 
39
39
  }
40
40
 
41
- str[i] = '\0'; /* または、str[i] = NULL; */
41
+ str[i] = '\0';
42
42
 
43
43
 
44
44
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  また、文字列の文字数が動的となる場合は、下記のようにmalloc等でメモリも動的に確保する必要があります。
58
58
 
59
- ここでは上記との比較のため文字サイズは固定としています。
59
+ ここでは上記との比較のため文字は固定としています。
60
60
 
61
61
 
62
62
 
@@ -94,7 +94,7 @@
94
94
 
95
95
  }
96
96
 
97
- str[i] = '\0'; /* または、str[i] = NULL; */
97
+ str[i] = '\0';
98
98
 
99
99
 
100
100
 

1

追記

2017/10/24 00:35

投稿

退会済みユーザー
test CHANGED
@@ -54,7 +54,7 @@
54
54
 
55
55
 
56
56
 
57
- また、文字数が動的となる場合は、下記のようにmalloc等でメモリも動的に確保する必要があります。
57
+ また、文字列の文字数が動的となる場合は、下記のようにmalloc等でメモリも動的に確保する必要があります。
58
58
 
59
59
  ここでは上記との比較のため文字サイズは固定としています。
60
60
 
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- str = (char*)malloc(sizeof(char) * (MAX+1));
85
+ str = (char*)malloc(sizeof(char) * (MAX+1)); /* メモリ確保失敗時の考慮をしていません */
86
86
 
87
87
 
88
88