Поскольку tokenHolder
представляет собой массив char *
, когда вы индексируете tokenHolder[i]
, вы передаете char *
в isdigit()
, а isdigit()
не принимает указатели.
Вероятно, вам не хватает второго цикла, или вам нужно:
if (isdigit(tokenHolder[i][0]))
printf("working\n");
Не забывайте о новой строке.
Ваш тест в цикле тоже нечетный; обычно вы пишете «нулевой указатель» как 0
или NULL
, а не как '\0'
; это просто вводит людей в заблуждение.
Кроме того, вам нужно обратить внимание на предупреждения компилятора, которые вы получаете! Не публикуйте код, который компилируется с предупреждениями, или (по крайней мере) указывайте, что это за предупреждения, чтобы люди могли видеть, что говорит вам компилятор. Вы должны стремиться к нулевым предупреждениям с компилятором, настроенным на суетливость.
Если вы пытаетесь проверить, что все значения в массиве токенов являются числами, вам нужна функция test_integer()
, которая пытается преобразовать строку в число и позволяет узнать, используются ли при преобразовании все данные в строке (или вы можете разрешить начальные и конечные пробелы). Ваша спецификация проблемы не совсем ясна, что вы пытаетесь сделать со строковыми токенами, которые вы нашли с помощью strtok()
и т. д.
Что касается того, почему вы получаете дамп ядра:
Код макроса isdigit() часто примерно
#define isdigit(x) (_Ctype[(x)+1]&_DIGIT)
Когда вы предоставляете указатель, он обрабатывается как очень большое (положительное или, возможно, отрицательное) смещение массива из (обычно) 257 значений, и поскольку вы обращаетесь к памяти за пределами границ, вы получаете ошибку сегментации. +1 позволяет передать EOF
в isdigit()
, когда EOF
равно -1
, что является обычным значением, но не является обязательным. Макросы/функции, такие как isdigit()
, принимают либо символ unsigned char
, обычно в диапазоне 0..255, следовательно, либо EOF в качестве допустимых входных данных.
person
Jonathan Leffler
schedule
28.02.2014
tokenHolder[i] != '\0'
не имеет смысла, еслиtokenHolder
является массивомchar *
. Это то же самое, что иtokenHolder[i] != NULL
. - person Dietrich Epp   schedule 28.02.2014