回答編集履歴
2
補足説明追加
test
CHANGED
@@ -43,3 +43,9 @@
|
|
43
43
|
`line=rand()%55 + 1`とすれば良いと思います。
|
44
44
|
|
45
45
|
|
46
|
+
|
47
|
+
---
|
48
|
+
|
49
|
+
補足
|
50
|
+
|
51
|
+
`strtok`関数は、返すべき文字列がないとNULLを返します。前述のループでfgetsを実行しないまま抜けると、前回のバッファの内容が残っているわけですが、区切り文字が消されてしまっているので最初のstrtokで文字列全体を返してしまい、次のstrtokでは返すべき文字列がないという状況になったのだと思われます。
|
1
追記
test
CHANGED
@@ -17,3 +17,29 @@
|
|
17
17
|
|
18
18
|
|
19
19
|
それぞれの配列は`[50]`で確保されているため、添え字に指定可能な範囲は`0~49`です。ループ初回でcountに50が入っているので、配列の範囲を超えています。
|
20
|
+
|
21
|
+
|
22
|
+
|
23
|
+
---
|
24
|
+
|
25
|
+
しっかり見て気になった点を。
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
> for(line=rand()%55;line>0;line--){
|
30
|
+
|
31
|
+
> fgets(line_text,256,fp);
|
32
|
+
|
33
|
+
> }
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
`rand()%55`は0になる可能性があります。その場合、条件判定でいきなりループ終了になるため、ループ内のfgetsが実行されません。
|
38
|
+
|
39
|
+
そうなると、`line_text`に正しい文字列が入らず、`strtok`関数が正しい結果を返さないのだと思います。
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
`line=rand()%55 + 1`とすれば良いと思います。
|
44
|
+
|
45
|
+
|