Pure Cのプログラムを作成しています(私の年度末コースプロジェクトの要件)。 csv値を格納するファイルは.datです。私はファイルを行とファイルを区切り文字で分割する関数を関数を、文字列分割関数はIDEでの変更まで完全に正常に動作したファイルを1行ずつ読み取る関数が見つかりました。私はJetBrainsの学生ライセンスを取得し、最近64ビットラップトップを購入しましたので、CLionにアップグレードしました。そのコードの特定のビットに問題が発生し始めたとき、プログラムの行がコードの行に到達したとき、特に文字列の最後の区切りを読み取るときにプログラムがハングします。デリミネーターで文字列を分割する
functions.c :: str_split
char** str_split(char* a_str, const char a_delim)
{
char** result = 0;
size_t count = 0;
char* tmp = a_str;
char* last_comma = 0;
char delim[2];
delim[0] = a_delim;
delim[1] = 0;
/* Count how many elements will be extracted. */
while (*tmp)
{
if (a_delim == *tmp)
{
count++;
last_comma = tmp;
}
tmp++;
}
/* Add space for trailing token. */
count += last_comma < (a_str + strlen(a_str) - 1);
/* Add space for terminating null string so caller
knows where the list of returned strings ends. */
count++;
result = malloc(sizeof(char*) * count);
if (result)
{
size_t idx = 0;
char* token = strtok(a_str, delim);
while (token)
{
assert(idx < count);
*(result + idx++)= strdup(token);
token = strtok(0, delim);
}
assert(idx == count - 1);
*(result + idx) = 0;
}
return result;
}
そしてそれはmain.cの中で、このように呼ばれて::メイン
...
while ((read =(size_t)getline(&file_line, &len, fp)) != -1) {
char **tokens;
tokens = str_split(file_line, ',');
...
プログラムは、この行にハング...エラーをスローしませんが、GDBデバッガが表示されて停止したときにIDEがlibのインクルードを示唆することによってこのエラーを解決しようとしますが、これは役に立たなくなります。
**純粋なC **はこれがエディタです...、IDE? – Michi
'strdup'は標準ライブラリ関数ではありませんが、実装によっては' strdup'を ''に入れます。 CLIONは明らかに 'strdup'を' 'に入れていますので、そのファイルを含めてみてください。 –
user3386109
エラーのためにmallocをチェックする必要があります – Michi