我有一个字符串"h264:640x480:4:30000"
。我使用sscanf函数如下。
char res[16] = { 0 };
int quality = 0;
int fps = 0;
sscanf(temp1, "h264:%s:%d:%d", res, &quality, &fps);
执行此功能时。我期待“res”中的“640x480”,“质量”中的“4”和“fps”中的“3000”。但它将整个字符串复制到“res”中,其他两个变量值保持为0。
此问题的正确格式是什么。
答案 0 :(得分:5)
使用以下sscanf()
字符串格式
sscanf(temp1, "h264:%[^:]:%d:%d", res, &quality, &fps);
%s
将捕获字符串中的所有字符,直到找到空格或到达字符串的末尾。所以%s
不是一个好的选择。
%[^:]
将捕获字符串中的所有字符,直到找到':'
字符串或到达字符串的末尾
答案 1 :(得分:1)
int sscanf( const char *buffer, const char *format, ... );
int sscanf( const char *restrict buffer, const char *restrict format, ... );
从null-terminated
字符串缓冲区
当你执行%s
时,它会输入一个空终止的字符串。因此它复制了整个
string(带:
)并且没有传递给其他两个。
正如Mohamed已经sscanf(temp1, "h264:%[^:]:%d:%d", res, &quality, &fps);
所述,因为它与字符集中的非空 序列 匹配。
如果集合的第一个字符是^,则所有字符不在集合中,即与[ ]
匹配。