我的字符串以abc或abcX开头,并以数字结尾。例如abc0159或abcX0159。我想知道是否可以用sscanf检索数字,而不管是否有“ X”。
#include <stdio.h>
void main() {
char str1[14] = "abc1234567890";
char str2[15] = "abcX1234567890";
char num[11];
sscanf(str2, "abc%*c%[0-9]", num); //Correct
num[0] = 0;
sscanf(str1, "abc%*c%[0-9]", num); //Removes first digit (wrong).
num[0] = 0;
sscanf(str2, "abc%*[X]%[0-9]", num); //Correct.
num[0] = 0;
sscanf(str1, "abc%*[X]%[0-9]", num); //Gives emty string.
}
也许它不适用于sscanf?
谢谢。
sscanf(str1, "%*[^0-9]%10s", num);
对两个字符串均有效,*
将读取值但不会将其写入变量,从而10
防止缓冲区溢出。
%* 10可以帮助我。因为现在使用sscanf(str1,“ abc%* 10 [^ 0-9]%s”,num); “ abc”仍然是必填项,但X是可选的。但是,如果可选字母只能是“ X”,则别无其他,那就更好了。我的实际情况不是“ X”,而是一个引号。
无论如何,这是一个令人满意的解决方案。
@anonymous是,它与引号一起使用
"abc\"1234567890"
,它开始扫描第一个数字(最多10个字符)