C中sscanf函数的正确格式

时间:2013-12-30 13:10:15

标签: c

我有一个字符串"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。

此问题的正确格式是什么。

2 个答案:

答案 0 :(得分:5)

使用以下sscanf()字符串格式

sscanf(temp1, "h264:%[^:]:%d:%d", res, &quality, &fps);

%s将捕获字符串中的所有字符,直到找到空格或到达字符串的末尾。所以%s不是一个好的选择。

%[^:]将捕获字符串中的所有字符,直到找到':'字符串或到达字符串的末尾

答案 1 :(得分:1)

sscanf

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);所述,因为它与字符集中的非空 序列 匹配。 如果集合的第一个字符是^,则所有字符不在集合中,即与[ ]匹配。