Это может быть сделано только с чистой арифметикой указателя.Предполагая, что line
содержит текущую строку:
char *p = line;
char *part1, *part2;
while (*p && *p != ' ') {
p++;
}
if (*p == ' ') {
*p++ = '\0';
part1 = strdup(line);
part2 = strdup(p);
if (!part1 || !part2) {
/* insufficient memory */
}
} else {
/* line doesn't contain a space */
}
В основном вы сканируете строку до первого появления пробела, а затем заменяете пробел нулевым символом, чтобы указать конец первой части (strdup
необходимо знать, где остановиться) и переместить указатель на единицу, чтобы получить оставшуюся часть строки.
Чтобы код выглядел еще чище, но с дополнительными затратами на вызов функции вы могли бы использовать strchr()
вместо цикла while
:
char *p = strchr(line, ' ');
char *part1, *part2;
if (p) {
*p++ = '\0';
part1 = strdup(line);
part2 = strdup(p);
}