回答編集履歴

4

誤記修正

2019/08/27 23:07

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
  {
84
84
 
85
- scanf("%3s",sp);
85
+ scanf("%4s",sp);
86
86
 
87
87
  }
88
88
 

3

誤記修正

2019/08/27 23:07

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -14,8 +14,6 @@
14
14
 
15
15
  こんな感じかな?
16
16
 
17
- scanf_s()が使えないのでfgets()にしてますが・・・入力時の文字数には気をつけましょう。
18
-
19
17
  ```text
20
18
 
21
19
  usr ~/Project/test % ./a.out
@@ -24,7 +22,7 @@
24
22
 
25
23
  123
26
24
 
27
- 2
25
+ 2
28
26
 
29
27
  3
30
28
 
@@ -39,6 +37,8 @@
39
37
  8
40
38
 
41
39
  9
40
+
41
+ 0
42
42
 
43
43
  入力終了
44
44
 
@@ -60,7 +60,11 @@
60
60
 
61
61
  9
62
62
 
63
+ 0
64
+
63
65
  ```
66
+
67
+ scanf_s()が使えないのでscanf()にしてますが・・・入力時の文字数には気をつけましょう。
64
68
 
65
69
  ```c
66
70
 
@@ -78,7 +82,7 @@
78
82
 
79
83
  {
80
84
 
81
- fgets(sp,STR_SIZ-1,stdin);
85
+ scanf("%3s",sp);
82
86
 
83
87
  }
84
88
 
@@ -110,7 +114,7 @@
110
114
 
111
115
  for (int i = 0; i < PTR_SIZ; i++) {
112
116
 
113
- fputs(gook[i],stdout);
117
+ puts(gook[i]);
114
118
 
115
119
  }
116
120
 

2

ソース追記

2019/08/27 22:42

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -11,3 +11,121 @@
11
11
  char *ptr= str;
12
12
 
13
13
  ```
14
+
15
+ こんな感じかな?
16
+
17
+ scanf_s()が使えないのでfgets()にしてますが・・・入力時の文字数には気をつけましょう。
18
+
19
+ ```text
20
+
21
+ usr ~/Project/test % ./a.out
22
+
23
+ 入力開始
24
+
25
+ 123
26
+
27
+ 2
28
+
29
+ 3
30
+
31
+ 4
32
+
33
+ 5
34
+
35
+ 6
36
+
37
+ 7
38
+
39
+ 8
40
+
41
+ 9
42
+
43
+ 入力終了
44
+
45
+ 123
46
+
47
+ 2
48
+
49
+ 3
50
+
51
+ 4
52
+
53
+ 5
54
+
55
+ 6
56
+
57
+ 7
58
+
59
+ 8
60
+
61
+ 9
62
+
63
+ ```
64
+
65
+ ```c
66
+
67
+ #include <stdio.h>
68
+
69
+
70
+
71
+ #define PTR_SIZ (10)
72
+
73
+ #define STR_SIZ (5)
74
+
75
+
76
+
77
+ static void go(char *sp)
78
+
79
+ {
80
+
81
+ fgets(sp,STR_SIZ-1,stdin);
82
+
83
+ }
84
+
85
+
86
+
87
+ int main(void)
88
+
89
+ {
90
+
91
+ char str[PTR_SIZ][STR_SIZ];
92
+
93
+ char *gook[PTR_SIZ] = { str[0], str[1], str[2], str[3], str[4],
94
+
95
+ str[5], str[6], str[7], str[8], str[9] };
96
+
97
+ //
98
+
99
+ puts("入力開始");
100
+
101
+ for (int i = 0; i < PTR_SIZ; i++) {
102
+
103
+ go(gook[i]);
104
+
105
+ }
106
+
107
+ puts("入力終了");
108
+
109
+ //
110
+
111
+ for (int i = 0; i < PTR_SIZ; i++) {
112
+
113
+ fputs(gook[i],stdout);
114
+
115
+ }
116
+
117
+
118
+
119
+ //
120
+
121
+ return 0;
122
+
123
+ }
124
+
125
+ ```
126
+
127
+ 各関数については[C言語関数辞典](http://www.c-tipsref.com/)などを参考にして下さい。
128
+
129
+ 当方の環境
130
+
131
+ clang version 10.0.0 (trunk 367677) on Linux mint 19.2

1

追記

2019/08/27 22:31

投稿

cateye
cateye

スコア6851

test CHANGED
@@ -1 +1,13 @@
1
1
  よくある間違いです。文字列を格納する領域を確保しないで、ポインタを使っています。
2
+
3
+ 「追記」
4
+
5
+ ポインタを扱うときには、データの格納域を確保してそのアドレスを代入することを忘れないようにしましょう。
6
+
7
+ ```c
8
+
9
+ char str[]="abcdefg";
10
+
11
+ char *ptr= str;
12
+
13
+ ```