回答編集履歴

2

補足説明追加

2016/05/08 14:43

投稿

catsforepaw
catsforepaw

スコア5938

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

追記

2016/05/08 14:43

投稿

catsforepaw
catsforepaw

スコア5938

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
+