Вы можете использовать sscanf
здесь, если вы знаете количество элементов вы ожидаете в строке:
char const *s = "10 22 45 67 89";
sscanf(s, "%d %d %d %d %d", numbers, numbers+1, numbers+2, numbers+3 numbers+4);
Если, однако, вы не знаете, количество элементов априорных, вы можете попробовать выполнить токенизацию ввода, а затем попытаться преобразовать каждый элемент отдельно.
char s[] = "10 22 45 67 89";
char *n = strtok(s, " ");
do {
numbers[k++] = atoi(n);
} while (n = strtok(NULL, " "));
Обратите внимание, что strtok
имеет довольно некрасивый интерфейс - он изменяет строку вы передаете его, и требует, чтобы вы использовать его примерно как указано выше - вы передаете строку ввода в первом вызове, а затем передать NULL для строки tokenize для последующих вызовов, пока вы не достигнете конца строки. Он хранит указатель на текущее местоположение внутри строки, что также создает проблему безопасности потоков.
Вы также можете использовать sscanf
с %n
преобразования для подсчета количества символов уже конвертирован, но это (ИМО) в почти прямой конкуренции с strtok
для некоторых из самых уродливых кода мыслимого, и я не могу справиться разместить две вещи как в один день.
Вы пытались использовать sscanf() в строке? Это довольно просто. – Fred