问题描述
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;