Ich schreibe ein Programm in Pure C (eine Voraussetzung für meine Ende des Jahres Kurs-Projekt). Es hat eine .dat Datei, die CSV-Werte speichert. Ich habe eine Funktion gefunden, um die Datei Zeile für Zeile zu lesen und eine Funktion, um die Zeile von der Datei durch einen Begrenzer zu trennen, die String-Split-Funktion funktionierte einwandfrei bis eine Änderung in IDEs. Ich habe eine Studentenlizenz bei JetBrains und habe kürzlich einen 64-Bit-Laptop gekauft, also habe ich auf CLion aufgerüstet. Dann begann ein Problem mit diesem spezifischen Bit Code, es hängt mein Programm, wenn es diese Codezeile erreicht, genauer gesagt, wenn die letzte Trennung in der Zeichenfolge gelesen wird.Eine Zeichenfolge durch einen Deliminator teilen
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;
}
Und ist es so genannt in main.c :: Haupt
...
while ((read =(size_t)getline(&file_line, &len, fp)) != -1) {
char **tokens;
tokens = str_split(file_line, ',');
...
Das Programm auf dieser Linie hängt ... Es wird kein Fehler ausgegeben, aber wenn es mit dem GDB Debugger gestoppt wird, zeigt die IDE an, diesen Fehler zu korrigieren, indem sie eine lib include vorschlägt, die helfen könnte, aber das führt auch zu keinem Erfolg.
** pure c ** ist das ein Editor ..., IDE? – Michi
'strdup 'ist keine Standardbibliotheksfunktion, aber einige Implementierungen setzen' strdup 'in' '. CLion hat offensichtlich "strdup" in '', also versuchen Sie es mit dieser Datei. –
user3386109
Sie sollten malloc auf Fehler überprüfen – Michi