implizite Deklaration der Funktion 'strtok_r' [-Wimplicit-function-declare] inspite include <string.h>
Ich habe den folgenden Code, um eine Zeichenfolge mit durch getrennten Zeilen zu kennzeichnen\n
und jede Zeile hat durch a getrennte ganze Zahlen\t
:
void string_to_int_array(char file_contents[BUFFER_SIZE << 5], int array[200][51]) {
char *saveptr1, *saveptr2;
char *str1, *str2;
char delimiter1[2] = "\n";
char delimiter2[2] = " ";
char line[200];
char integer[200];
int j;
for(j = 1, str1 = file_contents; ; j++, str1 = NULL) {
line = strtok_r(str1, delimiter1, &saveptr1);
if (line == NULL) {
break;
}
for (str2 = line; ; str2 = NULL) {
integer = strtok_r(str2, delimiter2, &saveptr2);
if (integer == NULL) {
break;
}
}
}
}
(Habe hier nur die relevante Funktion aufgenommen, die ggf. komplett ist, istHier.)
Wenn ich versuche, diesen Code zu kompilieren, verwende ich jedoch:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes file_read.c
Ich erhalte folgende Warnungen:
file_read.c:49:5: warning: implicit declaration of function ‘strtok_r’ [-Wimplicit-function-declaration]
line = strtok_r(str1, delimiter1, &saveptr1);
^
file_read.c:49:10: error: incompatible types when assigning to type ‘char[200]’ from type ‘int’
line = strtok_r(str1, delimiter1, &saveptr1);
^
file_read.c:59:15: error: incompatible types when assigning to type ‘char[200]’ from type ‘int’
integer = strtok_r(str2, delimiter2, &saveptr2);
^
Die Zeilen 49 und 59 entsprechen demstrtok_r
Anruf.
Wie Sie sehen können, habe ich aufgenommenstring.h
in meiner Akte (die ist wostrtok_r
wird deklariert), trotzdem bekomme ich die implizite Deklarationswarnung fürstrtok_r
.
Alle Einsichten darüber, wie ich die Warnung entfernen kann, sind erwünscht.
Ich benutze gcc 4.8.2 auf Ubuntu 14.04 64-Bit-Desktop.