Windows sscanf跳过capital';N';信
我对大写字母“N”有一个奇怪的sscanf问题(可能我不懂什么,请纠正我): 例1:Windows sscanf跳过capital';N';信,windows,stdio,scanf,Windows,Stdio,Scanf,我对大写字母“N”有一个奇怪的sscanf问题(可能我不懂什么,请纠正我): 例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"
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
我尝试过许多其他变体,但仍然总是跳过大写字母N。
问题在哪里
提前谢谢你 我猜它跳过大写N的原因是因为它是你忽略的字符集的一部分。关键的一点是,在括号之间指定的是一组要匹配的字符,而不是按固定顺序,而是sscanf尝试匹配最长的字符串,该字符串仅由“[”之后的字符组成,直到第一个匹配的“]”。如果我没记错的话 您可以尝试指定要跳过的字符集的大小,如下所示:
sscanf("GUIDNameNENE","%*8[GUIDName]%127s" ,cBuff);
sscanf("GUIDNameNENE","%*8s%127s" ,cBuff);
但这当然只适用于字符串长度始终为8个字符的情况,如果是,您可以选择忽略8个初始字符,如下所示:
sscanf("GUIDNameNENE","%*8[GUIDName]%127s" ,cBuff);
sscanf("GUIDNameNENE","%*8s%127s" ,cBuff);
%[GUIDName]
引用和匹配精确字符串的方式并不奇怪。它定义了一组将匹配的字符。它们将以任何顺序匹配,并且将重复匹配
输入中设置%[GUIDName]
的最长匹配是GUIDNameN
当然,你可以说
%*[G]%*[U]%*[I]%*[D]%*[N]%*[a]%*[m]%*[e]
,这不会吃掉任何字符GUIDNam
,但它仍然会吃掉多个e。有帮助,这是真的,它是一组没有顺序的字符。