0

C で getline() 関数を使用していますが、配列のように複数回使用すると、セグ フォールトが発生し続けます。これが私が書いた方法です:

temp = (char *)malloc(sizeof(char)*clen); 
read = getline(&temp, &clen, stdin);
tn = strtok(temp, ",");
strcpy(travel[tripnum].name, tn);
tn = strtok(NULL, ",");
travel[tripnum].country = tn;
free((void *) temp);

何か間違ったことを宣言している場合はお知らせください

4

4 に答える 4

2

このgetlineチュートリアルに見られるように、割り当てる必要があります(clen + 1)。ターミナルNULL用に1つ余分。

于 2011-03-29T07:40:00.580 に答える
0

変数tn(の結果)はバッファstrtok()内を指します。temp

tempバッファはスニペットの最後の行で破棄されますが、ポインタの1つ(tnの内側へのtemp)はに保存されていtravel[tripnum].countryます。

これtravel[tripnum].countryはダングリングポインタであり、それを介したすべてのアクセスは無効です。

于 2011-03-29T09:29:34.020 に答える
0

他の人が言ったことと一緒にこれを使ってみてください。getline関数では、クレンはアンパサンドなしで使用する必要があると感じています。read = getline(&temp、clen、stdin);のように

于 2011-03-29T09:17:20.327 に答える
0

これを試してみましたか temp = (char *)malloc(sizeof(char)*clen+1);

null で終了する文字列のため

于 2011-03-29T07:46:11.773 に答える