2014-02-17 2 views
1

У меня странная проблема sscanf с заглавной буквой «N» (может быть, я не понимаю, что-то поправьте меня, пожалуйста):sscanf пропускает заглавную букву «N»

Пример 1:

char cBuff[128]; 
sscanf("GUIDNameNENE","%*[GUIDName]%127s" ,cBuff); 

возвращает cBuff:ENE

Пример 2:

char cBuff[128]; 
sscanf("GUIDNamenENE","%*[GUIDName]%127s" ,cBuff); 

возвращается cBuff:nENE

Пример 3:

char cBuff[128]; 
sscanf("GUIDNaMENE","%*[GUIDNa]%127s" ,cBuff); 

возвращает cBuff:ENE

Я пробовал много других вариантов, но все же всегда скачет капитал Н. Где проблема?

Спасибо заранее!

ответ

0

Я бы предположил, что он пропускает капитал N, потому что он является частью набора символов, которые вы игнорируете. Ключевым моментом является то, что вы указываете между скобками - это набор символов для соответствия, а не в фиксированном порядке, а скорее то, что sscanf пытается сопоставить самую длинную строку, состоящую только из символов после «['до первого соответствия ']'. Если я вспомню правильный.

Вы можете попробовать указать размер для набора символов, которые будут пропущены, как это:

sscanf("GUIDNameNENE","%*8[GUIDName]%127s" ,cBuff); 

Но это, конечно, будет работать только, если строка всегда имеет длину восемь символов, и если это вы можете выбрать просто игнорировать восемь начальных символов, как это:

sscanf("GUIDNameNENE","%*8s%127s" ,cBuff); 
1

%[GUIDName] не странно способ цитирования и согласования точной строки. Он определяет набор символов, который будет соответствовать. Они будут соответствовать в любом порядке, и они будут повторяться повторно.

Наибольшее совпадение по набору %[GUIDName] на ваших входах является GUIDNameN.

Вы можете, конечно, сказать %*[G]%*[U]%*[I]%*[D]%*[N]%*[a]%*[m]%*[e], и это не будет есть ни один из символов GUIDNam, но он все равно будет есть несколько e s.

+0

Помог, это правда, это набор символов без ордера. – user3320933

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