2012-04-10 2 views
1

У меня есть строка символов, которая является чем-то вроде «asdf + lghd + ewre + fdsf + ...», которая имеет разную длину. Из этого у меня также есть шаблон для использования с функцией sscanf, которая похожа на «% s +% s +% s + ...». Поскольку оба они имеют различную длину, можно ли заменить эти дополнительные аргументы в sscanf, где значения должны быть сохранены с помощью динамического массива строк? Например:Возможны замены аргументов sscanf массивом

char *test = "adfe + asdf + fghe + jklo"; 
char *template = "%s + %s + %s + %s"; 
char destination[4][4]; 
sscanf(test, template, destination); 

С первого взгляда, похоже, это не работает, так есть ли альтернативный способ сделать это?

ответ

0

sscanf() не поддерживает это, но вы можете написать свою собственную версию scanf.

Я уже сделал это на C# и разместил код here. Возможно, мой код даст вам некоторые идеи для написания пользовательской версии в C.

0

То, что вы пытаетесь сделать, невозможно с sscanf. Вам придется его зацикливать.

0

Нет. Sscanf, как и все функции xxxxxf в 'C', работает, имея переменное количество арабов в списке аргументов. Если вы ищете 4 строки (4% s), функция ожидает 4 аргумента, которые являются массивами символов. В вашем примере вы предоставляете единственный аргумент, который представляет собой массив из 4 массивов символов.

Один из способов, с помощью которого можно было бы разобрать вход, используя любой разделитель, который вы используете. Посмотрите на функции substr и pos для некоторых подсказок о том, как это сделать.

Смежные вопросы