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