[英]right format for sscanf function in 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。
此问题的正确格式是什么?
使用以下sscanf()
字符串格式
sscanf(temp1, "h264:%[^:]:%d:%d", res, &quality, &fps);
%s
将捕获字符串中的所有字符,直到找到空白或到达字符串末尾为止。 因此%s
不是一个好选择。
%[^:]
将捕获字符串中的所有字符,直到找到':'
字符或到达字符串末尾
int sscanf( const char *buffer, const char *format, ... );
int sscanf( const char *restrict buffer, const char *restrict format, ... );
从以null-terminated
字符串缓冲区中读取数据
当您执行%s
,它将接收一个以null结尾的字符串。 因此,它复制了整个字符串(含:
)和通过任何其他两个。
如Mohamed所说, sscanf(temp1, "h264:%[^:]:%d:%d", res, &quality, &fps);
之所以有用,是因为它匹配字符集中的非空字符序列 。 如果集合中的第一个字符为^,则匹配集合中未包含即[ ]
所有字符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.