首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >esp-idf中出现"sprintf“错误。msys2中的gcc 9.1.0版

esp-idf中出现"sprintf“错误。msys2中的gcc 9.1.0版
EN

Stack Overflow用户
提问于 2020-07-04 16:41:33
回答 1查看 494关注 0票数 0

我早些时候在gcc 6.4.0中使用了msys2,当时我正在为我的项目工作。我把工具链和gcc升级到了9.1.0。现在我得到了这个错误:

一小部分代码:

代码语言:javascript
运行
复制
    memset(payload, 0, 8192);
    sprintf(payload, "GET %s%s HTTP/1.1\r\n", dynamic_fota_url, 
    new_firmware_version);
    sprintf(payload, "%sHost: %s\r\n", payload, dynamic_hostname);
    sprintf(payload, "%sPort: 443\r\n", payload);
    sprintf(payload, "%sAccept: */*\r\n\r\n", payload);

错误信息是:-

代码语言:javascript
运行
复制
D:/dozee/dozee_compiler/msys32/home/esp-idf/examples/dozee_fw_v62/main/dozee_next.c:2092:12: error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
    sprintf(payload, "%sPort: 443\r\n", payload);
            ^~~~~~~                     ~~~~~~~
D:/dozee/dozee_compiler/msys32/home/esp-idf/examples/dozee_fw_v62/main/dozee_next.c:2093:12: error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
    sprintf(payload, "%sAccept: */*\r\n\r\n", payload);
            ^~~~~~~                           ~~~~~~~
D:/dozee/dozee_compiler/msys32/home/esp-idf/examples/dozee_fw_v62/main/dozee_next.c:2344:15: error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
       sprintf(payload, "%sHost: %s\r\n", payload, dynamic_hostname);
               ^~~~~~~                    ~~~~~~~
D:/dozee/dozee_compiler/msys32/home/esp-idf/examples/dozee_fw_v62/main/dozee_next.c:2345:15: error: passing argument 1 to restrict-qualified parameter aliases with argument 3 [-Werror=restrict]
       sprintf(payload, "%sPort: 443\r\n", payload);

我怎么才能解决这个问题。如何将我的gcc降级到以前的版本?

EN

回答 1

Stack Overflow用户

发布于 2020-07-04 16:49:31

错误:将参数%1传递给具有参数%3的限制限定的参数别名

如何解决这个问题。

不要将参数1与任何其他参数一起作为printf的别名。

代码语言:javascript
运行
复制
sprintf(some_buffer, "%s fmt string", some_different_buffer);

为缓冲区设置别名是无效的,不允许这样做,并会导致undefined behavior。您写入和读取的缓冲区不允许重叠。

使用strcat追加到字符串。或者通过移动与sprintf一起使用的缓冲区起始位置来计算偏移量并附加到缓冲区。我更喜欢使用snprintf而不是sprintfsnprintfsprintf返回写入的字节计数(不包括零终止字节),使用该计数。使用snprintf附加到缓冲区的典型用法可能如下所示:

代码语言:javascript
运行
复制
char payload[200];
int len = snprintf(payload, sizeof(payload), "initialize");
len += snprintf(payload + len, sizeof(payload) - len, "Port: 443\r\n", payload);
len += snprintf(payload + len, sizeof(payload) - len, "Accept: */*\r\n\r\n", payload);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62727076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档