strtol
указывает, где в строке произошел сбой.
Для такой строки, как "1 2 3 ..."
, будет прочитано 1
и произойдет сбой сразу после этого;если затем передать эту точку отказа (" 2 3 ..."
) на strtol
, она будет читать 2
и сразу после этого произойдет сбой, ..., ...
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
char input[] = "6 82 -7453 4 0 63 ";
char *err = " ", *curr = input;
int x, k = 0;
while (*curr && isspace((unsigned char)*err)) {
x = strtol(curr, &err, 10);
printf("#%d: %d\n", k++, x);
curr = err + !!*err; // do not advance past the '\0'
}
return 0;
}
См.он в действии - в отличие от приведенного выше фрагмента, идеальный инициализирует k
с 1: / и плохо обрабатывает входные данные, заканчивающиеся пробелами.