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
不提供从参数中获取字段宽度。但就这一点而言:
Aim:将与字符串目标中相同数量的字符放入字符串缓冲区,其中p是指向某个元素的char*字符串的。
sscanf()
等I/O功能相对较重。如果您只想将一个字符串(部分(复制到另一个字符串,那么memcpy()
或strncpy()
将更适合该任务。或者strncat()
,其属性使其在该特定任务中优于其他两个,因为有了它,您就没有超出memcpy()
带来的源字符串的风险,也不需要手动确保终止memcpy()
和strncpy()
带来的结果。示例:
*buffer = ' '; // start with an empty string
strncat(buffer, p, y); // concatenate the wanted region of the source string
对于sscanf()
,"%*s"
中的*
是参数抑制,而不是大小。
CCD_ 18简单地扫描CCD_。CCD_ 20未使用。
建议研究fgets()
。
我相信你想要
#include <string.h>
memcpy(buffer, p, strlen(target));
请注意,这不会添加终止NUL。这可以通过以下方式实现:
#include <string.h>
size_t len = strlen(target);
memcpy(buffer, p, len);
buffer[len] = 0;