У меня есть следующий код для токенизации строки, содержащей строки, разделенные \n
, и каждая строка имеет целые числа, разделенные \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;
}
}
}
}
(Включите здесь только соответствующую функцию, полная, если требуется, находится здесь.)
Однако, когда я пытаюсь скомпилировать этот код, используя:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes file_read.c
Я получаю следующие предупреждения:
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);
^
Строки № 49 и 59 соответствуют вызову strtok_r
.
Как видите, я включил string.h
в свой файл (где объявлено strtok_r
), тем не менее я получаю предупреждение о неявном объявлении для strtok_r
.
Приветствуются любые идеи о том, как я могу удалить предупреждение.
Я использую gcc 4.8.2 на 64-битном рабочем столе Ubuntu 14.04.
strtok_r
следует правильно ввести с помощьюstring.h
, но это функция POSIX-2001, и вы должны убедиться, что она включена. Либо#define _POSIX_C_SOURCE 200112L
перед включением любого из стандартных заголовков, либо укажите его с помощью параметра-D
в ваших переключателях командной строки для вашего компилятора. Это, конечно, при условии, что ваша реализация поддерживает это, и я, конечно, ожидаю, что ваша. - person WhozCraig   schedule 30.05.2014#define _POSIX_C_SOURCE
на странице руководства дляstrtok_r
, откуда мне знать, что я должен это делать? - person jobin   schedule 30.05.2014