回答編集履歴

1

コードの修正

2020/07/02 05:54

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -61,3 +61,77 @@
61
61
  }
62
62
 
63
63
  ```
64
+
65
+ **追記**
66
+
67
+ - read_text の中に 1000 という値が書いてあるのはよくない。
68
+
69
+ - 改行文字が無い場合を想定していない。
70
+
71
+ - main で使用しない変数 p が宣言されている。
72
+
73
+
74
+
75
+ 以上のような不具合を修正します。
76
+
77
+ ```C
78
+
79
+ #include <stdio.h> // fopen, fclose, fgets, printf
80
+
81
+ #include <string.h> // strchr
82
+
83
+
84
+
85
+ int read_text(const char *fn, char *text, int n)
86
+
87
+ {
88
+
89
+ FILE *fp = fopen(fn, "r");
90
+
91
+ if (!fp || !fgets(text, n, fp)) return 1;
92
+
93
+ fclose(fp);
94
+
95
+ char *p = strchr(text, '\n');
96
+
97
+ if (p) *p = '\0';
98
+
99
+ return 0;
100
+
101
+ }
102
+
103
+
104
+
105
+ int explode(char *text, char **word, char delim)
106
+
107
+ {
108
+
109
+ int n = 0;
110
+
111
+ for (char *p = text; p = strchr(word[n++] = p, delim); *p++ = '\0') ;
112
+
113
+ return n;
114
+
115
+ }
116
+
117
+
118
+
119
+ int main(int argc, char *argv[])
120
+
121
+ {
122
+
123
+ char text[1000], *word[500];
124
+
125
+ if (argc != 3) return 1;
126
+
127
+ if (read_text(argv[1], text, sizeof text)) return 2;
128
+
129
+ int n = explode(text, word, argv[2][0]);
130
+
131
+ printf("入力文字列:%s\n" "単語数:%d\n", text, n);
132
+
133
+ for (int i = 0; i < n; i++) printf("%d %s\n", i+1, word[i]);
134
+
135
+ }
136
+
137
+ ```