%s
сканирует, пока символ пробела (или EOF
) не будет.
Используйте спецификатор формата %[
для анализа вашей строки:
sscanf(text, "%[^,],%[^(](%[^)])", val1, val2, val3);
%[^,]
будет сканировать все до тех пор, пока a ,
,
не будет использовать запятую, поскольку %[^,]
не будет ее использовать
%[^(]
будет сканировать все до a (
(
будет использовать левую скобку, поскольку %[^(]
не будет использовать ее
и т. Д.
Всегда проверяйте возвращаемое значение sscanf
.sscanf
возвращает количество аргументов, успешно прочитанных и присвоенных.
int retVal = sscanf(text,"%[^,],%[^(](%[^)])", val1, val2, val3);
if(retVal == 3)
{
/* Scanned and assigned all three arguments successfully */
}
else if(retVal == EOF)
{
/* EOF was encountered */
}
else
{
/* Invalid input; parsing error */
}