Сделайте это:
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-символы.%%
используется для печати одного %
на выходе, а \\
используется для печати одного \
в выходной строке.