繁体   English   中英

C中sscanf函数的正确格式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM