c语言 - "sprintf" ESP-IDF 中的错误。GCC 9.1.0 在 MSy2 中



我之前在gcc 6.4.0中使用了msys2,并且正在为我的项目工作。我将工具链和 gcc 升级到 9.1.0。现在我收到此错误:

代码的一小部分:

memset(payload, 0, 8192);
sprintf(payload, "GET %s%s HTTP/1.1rn", dynamic_fota_url, 
new_firmware_version);
sprintf(payload, "%sHost: %srn", payload, dynamic_hostname);
sprintf(payload, "%sPort: 443rn", payload);
sprintf(payload, "%sAccept: */*rnrn", payload);

错误消息是:-

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: 443rn", 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: */*rnrn", 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: %srn", 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: 443rn", payload);

我该如何解决这个问题。 如何将我的 GCC 降级到以前的版本?

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

如何解决这个问题。

不要将参数1 别名以使用任何其他参数来打印f。

sprintf(some_buffer, "%s fmt string", some_different_buffer);

对缓冲区进行别名是无效的,不允许这样做,并导致未定义的行为。写入和读取的缓冲区不允许重叠。

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

char payload[200];
int len = snprintf(payload, sizeof(payload), "initialize");
len += snprintf(payload + len, sizeof(payload) - len, "Port: 443rn", payload);
len += snprintf(payload + len, sizeof(payload) - len, "Accept: */*rnrn", payload);

最新更新