带有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中相同数量的字符,其中pchar *指向字符串的某个元素。

解决方法

其他答案说明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;

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...