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

回答編集履歴

1

コードの修正

2020/07/02 05:54

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -29,4 +29,41 @@
29
29
  printf("入力文字列:%s\n" "単語数:%d\n", text, n);
30
30
  for (int i = 0; i < n; i++) printf("%d %s\n", i+1, word[i]);
31
31
  }
32
+ ```
33
+ **追記**
34
+ - read_text の中に 1000 という値が書いてあるのはよくない。
35
+ - 改行文字が無い場合を想定していない。
36
+ - main で使用しない変数 p が宣言されている。
37
+
38
+ 以上のような不具合を修正します。
39
+ ```C
40
+ #include <stdio.h> // fopen, fclose, fgets, printf
41
+ #include <string.h> // strchr
42
+
43
+ int read_text(const char *fn, char *text, int n)
44
+ {
45
+ FILE *fp = fopen(fn, "r");
46
+ if (!fp || !fgets(text, n, fp)) return 1;
47
+ fclose(fp);
48
+ char *p = strchr(text, '\n');
49
+ if (p) *p = '\0';
50
+ return 0;
51
+ }
52
+
53
+ int explode(char *text, char **word, char delim)
54
+ {
55
+ int n = 0;
56
+ for (char *p = text; p = strchr(word[n++] = p, delim); *p++ = '\0') ;
57
+ return n;
58
+ }
59
+
60
+ int main(int argc, char *argv[])
61
+ {
62
+ char text[1000], *word[500];
63
+ if (argc != 3) return 1;
64
+ if (read_text(argv[1], text, sizeof text)) return 2;
65
+ int n = explode(text, word, argv[2][0]);
66
+ printf("入力文字列:%s\n" "単語数:%d\n", text, n);
67
+ for (int i = 0; i < n; i++) printf("%d %s\n", i+1, word[i]);
68
+ }
32
69
  ```