Как разделить строку один раз? - PullRequest
0 голосов
/ 07 сентября 2011

Я хочу разбить строку только на две части в первом символе пробела. Например, у меня есть строка «Hay Guys LOL», а при разбиении «Hay» должен быть в одной переменной, а «Guys LOL» в другой.

Я рассмотрел такие функции, как strtok - это работает, но я бы предпочел не зацикливаться, а затем объединять строки.

Вот что у меня сейчас (пробуя sscanf):

char test[32];
strcpy(test, "Hay Guys LOL\r\n");

// p1 should have "Hay", and p2 have "Guys LOL"?
char p1[16], p2[16];
sscanf(test, "%s %s\r\n", p1, p2);

printf("p1: %s\n", p1);
printf("p2: %s\n", p2);

Спасибо!

1 Ответ

2 голосов
/ 07 сентября 2011

Сделайте это:

sscanf(test, "%s %[^\r\n]", p1, p2);

Первая %s будет читать только первую строку до первого пробела с надписью "Hay".Далее скансет будет считывать, пока '\r' или '\n' не будет не , найденным в строке (^ в [] инвертирует набор).Поэтому %[^\r\n] будет читать остальную часть строки в p2.

ОБНОВЛЕНИЕ

Как сказал @Adam Rosenfield, чтобы избежать переполнения буфера, вам нужно ограничитьколичество символов в p1 и p2 на sscanf.Вы указываете номера символов, таких как %10[^\r\n] и %10s.Поскольку эти числа должны быть частью строки формата, возможно, вы захотите динамически создать строку формата перед использованием.

char format_string[MAX];

sprintf (format_string, "%%%ds %%%d[^\\r\\n]", 10, 10);

sscanf (test, format_string, p1, p2);

Над строкой форматирования с ограничением длины сначала делается, а затем используется,Обратите внимание на escape-символы.%% используется для печати одного % на выходе, а \\ используется для печати одного \ в выходной строке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...