回答編集履歴
2
ソース修正
answer
CHANGED
@@ -34,7 +34,7 @@
|
|
34
34
|
if( len > 5 ){
|
35
35
|
puts("領域を超えています。");
|
36
36
|
free(mojiretu);
|
37
|
-
|
37
|
+
continue; // break→continue
|
38
38
|
}
|
39
39
|
buf[len-1]= '\0'; // 改行を削除
|
40
40
|
strcpy(mojiretu,buf);
|
@@ -46,12 +46,17 @@
|
|
46
46
|
}
|
47
47
|
|
48
48
|
usr~/test/c % ./a.out
|
49
|
+
文字列を入力:1234567
|
50
|
+
領域を超えています。
|
51
|
+
文字列を入力:abc
|
52
|
+
入力された文字列はabcです。
|
49
53
|
文字列を入力:1234
|
50
54
|
入力された文字列は1234です。
|
51
|
-
文字列を入力:abcd
|
52
|
-
入力された文字列はabcdです。
|
53
55
|
文字列を入力:12345
|
54
56
|
領域を超えています。
|
57
|
+
文字列を入力:0
|
58
|
+
入力された文字列は0です。
|
59
|
+
文字列を入力:^C
|
55
60
|
usr~/test/c %
|
56
|
-
|
57
|
-
```
|
61
|
+
```
|
62
|
+
一部修正しました、ただ、これだとメモリ確保に失敗しないと終了しません、
|
1
追記
answer
CHANGED
@@ -3,4 +3,55 @@
|
|
3
3
|
繰り返し入力させるなら、確保→入力→解放の繰り返し while()の条件見直し。
|
4
4
|
システム(OS)の空きメモリ開放は時間がかかるのでfree()推奨d^^。
|
5
5
|
あと・・・メモリが確保できなというのは考えづらい。
|
6
|
-
ちなみにうちの機械(linux:mem16GB)では、8GBぐらいなら余裕で確保できます。
|
6
|
+
ちなみにうちの機械(linux:mem16GB)では、8GBぐらいなら余裕で確保できます。
|
7
|
+
|
8
|
+
「追記」
|
9
|
+
繰り返し入力&メモリ確保失敗と入力長異常に対応(題意にそぐわないなら無視希望)
|
10
|
+
```c
|
11
|
+
usr~/test/c % cat ct.c
|
12
|
+
#include<stdio.h>
|
13
|
+
#include<stdlib.h>
|
14
|
+
#include<string.h>
|
15
|
+
|
16
|
+
#define Forever for(;;)
|
17
|
+
|
18
|
+
int main(void)
|
19
|
+
{
|
20
|
+
char *mojiretu;
|
21
|
+
char buf[100];
|
22
|
+
|
23
|
+
Forever{
|
24
|
+
mojiretu = (char *)malloc(5);
|
25
|
+
if (mojiretu == NULL)
|
26
|
+
{
|
27
|
+
puts("メモリ確保失敗。");
|
28
|
+
break;
|
29
|
+
}
|
30
|
+
|
31
|
+
printf("文字列を入力:");
|
32
|
+
fgets(buf,sizeof buf - 1, stdin);
|
33
|
+
size_t len= strlen(buf);
|
34
|
+
if( len > 5 ){
|
35
|
+
puts("領域を超えています。");
|
36
|
+
free(mojiretu);
|
37
|
+
break;
|
38
|
+
}
|
39
|
+
buf[len-1]= '\0'; // 改行を削除
|
40
|
+
strcpy(mojiretu,buf);
|
41
|
+
printf("入力された文字列は%sです。\n", mojiretu);
|
42
|
+
free(mojiretu);
|
43
|
+
}
|
44
|
+
|
45
|
+
return 0;
|
46
|
+
}
|
47
|
+
|
48
|
+
usr~/test/c % ./a.out
|
49
|
+
文字列を入力:1234
|
50
|
+
入力された文字列は1234です。
|
51
|
+
文字列を入力:abcd
|
52
|
+
入力された文字列はabcdです。
|
53
|
+
文字列を入力:12345
|
54
|
+
領域を超えています。
|
55
|
+
usr~/test/c %
|
56
|
+
|
57
|
+
```
|