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

回答編集履歴

3

追記

2017/10/24 00:43

投稿

退会済みユーザー
answer CHANGED
@@ -54,4 +54,32 @@
54
54
 
55
55
  return 0;
56
56
  }
57
+ ```
58
+ ---
59
+ 追記:
60
+
61
+ エラーの内容は文字と文字列を同様に扱おうとしているという型に関する警告ですが、"a"が`char [2]`となっているのは、文字列"a"が、`a`と`\0`の2文字から構成されているためです。
62
+ 固定文字列に対してはあまり行うことはないかもしれませんが、文字列の1文字目である`a`を使用したい場合は下記のように参照することも可能です。
63
+
64
+ ```c
65
+ #include <stdio.h>
66
+ #include <stdlib.h>
67
+
68
+ #define MAX 256
69
+
70
+ int main(void)
71
+ {
72
+ char str[MAX + 1];
73
+ int i;
74
+
75
+ for (i = 0; i < MAX; i++)
76
+ {
77
+ str[i] = "a"[0];
78
+ }
79
+ str[i] = '\0';
80
+
81
+ printf("%s\n", str);
82
+
83
+ return 0;
84
+ }
57
85
  ```

2

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

2017/10/24 00:42

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,4 @@
1
- 他の方のご回答ように、まずは文字と文字列の違いを理解することが大切です。
1
+ 他の方のご回答にもあるように、まずは文字と文字列の違いを理解することが大切です。
2
2
  C言語では、1文字はchar型の値を、文字列は最後が終端文字`\0`で終わるchar型の配列として扱います。
3
3
  そのため、256文字の文字列を扱う場合、終端文字を含めるために1文字分多く配列を宣言する必要があります。
4
4
 
@@ -18,7 +18,7 @@
18
18
  {
19
19
  str[i] = 'a';
20
20
  }
21
- str[i] = '\0'; /* または、str[i] = NULL; */
21
+ str[i] = '\0';
22
22
 
23
23
  printf("%s\n", str);
24
24
 
@@ -27,7 +27,7 @@
27
27
  ```
28
28
 
29
29
  また、文字列の文字数が動的となる場合は、下記のようにmalloc等でメモリも動的に確保する必要があります。
30
- ここでは上記との比較のため文字サイズは固定としています。
30
+ ここでは上記との比較のため文字は固定としています。
31
31
 
32
32
  ```c
33
33
  #include <stdio.h>
@@ -46,7 +46,7 @@
46
46
  {
47
47
  str[i] = 'a';
48
48
  }
49
- str[i] = '\0'; /* または、str[i] = NULL; */
49
+ str[i] = '\0';
50
50
 
51
51
  printf("%s\n", str);
52
52
 

1

追記

2017/10/24 00:35

投稿

退会済みユーザー
answer CHANGED
@@ -26,7 +26,7 @@
26
26
  }
27
27
  ```
28
28
 
29
- また、文字数が動的となる場合は、下記のようにmalloc等でメモリも動的に確保する必要があります。
29
+ また、文字列の文字数が動的となる場合は、下記のようにmalloc等でメモリも動的に確保する必要があります。
30
30
  ここでは上記との比較のため文字サイズは固定としています。
31
31
 
32
32
  ```c
@@ -40,7 +40,7 @@
40
40
  char* str;
41
41
  int i;
42
42
 
43
- str = (char*)malloc(sizeof(char) * (MAX+1));
43
+ str = (char*)malloc(sizeof(char) * (MAX+1)); /* メモリ確保失敗時の考慮をしていません */
44
44
 
45
45
  for (i = 0; i < MAX; i++)
46
46
  {