我早些时候在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降级到以前的版本?
发布于 2020-07-04 16:49:31
错误:将参数%1传递给具有参数%3的限制限定的参数别名
如何解决这个问题。
不要将参数1与任何其他参数一起作为printf的别名。
sprintf(some_buffer, "%s fmt string", some_different_buffer);为缓冲区设置别名是无效的,不允许这样做,并会导致undefined behavior。您写入和读取的缓冲区不允许重叠。
使用strcat追加到字符串。或者通过移动与sprintf一起使用的缓冲区起始位置来计算偏移量并附加到缓冲区。我更喜欢使用snprintf而不是sprintf。snprintf和sprintf返回写入的字节计数(不包括零终止字节),使用该计数。使用snprintf附加到缓冲区的典型用法可能如下所示:
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);https://stackoverflow.com/questions/62727076
复制相似问题