我之前在gcc 6.4.0中使用了msys2,并且正在为我的项目工作。我将工具链和gcc升级到9.1.0。现在我收到此错误:
一小段代码:
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);
,错误消息是:-
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降级到以前的版本?
答案 0 :(得分:1)
错误:将参数1传递给参数3的限定条件的参数别名
如何解决此问题。
请勿将参数1与其他任何参数混用到printf。
no= (container) yes= container
no= (shadow-lg) yes= shadow-lg
别名缓冲区无效,不允许这样做,结果为undefined behavior。您写入和读取的缓冲区不允许重叠。
使用sprintf(some_buffer, "%s fmt string", some_different_buffer);
附加到字符串。或通过偏移与strcat
一起使用的缓冲区起始位置来计算偏移量并追加到缓冲区。最好使用sprintf
而不是snprintf
。 sprintf
和snprintf
返回写入的字节数(不包括零终止字节),请使用该计数。用sprintf
追加到缓冲区的典型用法如下:
snprintf