如何解决带有sscanf的变量字符串限制“%* s” ==>“格式字符串未使用数据参数”
int y = strlen(target);
sscanf(p,"%*s",y,buffer);
上面的代码为什么会导致warning: data argument not used by format string
?
用Apple clang version 11.0.0 (clang-1100.0.33.17)
编译。
目标:要在字符串target
中获得与字符串buffer
中相同数量的字符,其中p
是char *
指向字符串的某个元素。
解决方法
其他答案说明sscanf
不提供从参数中获取字段宽度的功能。但就此而言:
目标:要在字符串缓冲区中获取与字符串目标中相同数量的字符,其中p是一个char *指向某个元素 字符串。
诸如sscanf()
之类的I / O功能相对较重。如果您要做的只是将一个字符串复制(到一部分)到另一个字符串中,那么memcpy()
或strncpy()
将更适合该任务。或strncat()
的属性使其在此特定任务上优于其他两个属性,因为这样做不会冒memcpy()
带来的源字符串超支的风险,也无需手动确保memcpy()
和strncpy()
附带的结果的终止。示例:
*buffer = '\0'; // start with an empty string
strncat(buffer,p,y); // concatenate the wanted region of the source string
,
对于sscanf()
,*
中的"%*s"
是一个参数抑制,而不是大小。
sscanf(p,"%*s",y,buffer);
仅扫描p
来查找非空白字符串,而不保存任何内容。 y,buffer
未使用。
建议研究fgets()
。
我相信你想要
#include <string.h>
memcpy(buffer,strlen(target));
请注意,这不会添加终止NUL。这可以通过以下方式实现:
#include <string.h>
size_t len = strlen(target);
memcpy(buffer,len);
buffer[len] = 0;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。