gpt4 book ai didi

c - snprintf - 格式化不是字符串文字并且没有格式参数警告

转载 作者:行者123 更新时间:2023-12-01 15:50:21 24 4
gpt4 key购买 nike

我收到 format not a string literal and no format arguments当我在 Linux 上编译它时发出警告。 snprintf显示 const char*对于第三个参数。定义const char *INTERFACE = "wlan0"有什么错误然后将其传递给函数?

#include <stdio.h>
#include <net/if.h>
#include <string.h>

int main(int argc,char *argv[]){
const char *INTERFACE = "wlan0";
struct ifreq ifr;

memset(&ifr, 0, sizeof(ifr));
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), INTERFACE);

return 0;
}

最佳答案

这没有错(这就是为什么它是警告而不是错误的原因),这只是 printf 的最常见用法。函数族使用文字格式字符串。

喜欢:

snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "%s", INTERFACE);

在您的情况下,您可能应该使用例如 memcpy 反而:
#define MIN(a, b) ((a) < (b) ? (a) : (b))

memcpy(ifr.ifr_name, INTERFACE, MIN(strlen(INTERFACE) + 1, sizeof(ifr.ifr_name));

还有 strncpy 这可能有效,但在某些情况下它不会添加终止 '\0'特点。

关于c - snprintf - 格式化不是字符串文字并且没有格式参数警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16011359/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com