0

我之前在 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 降级到以前的版本?

4

1 回答 1

2

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

如何解决这个问题。

不要使用任何其他参数将参数 1 别名为 printf。

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

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

用于strcat附加到字符串。或者通过移动您使用的缓冲区起始位置来计算偏移量并附加到缓冲区sprintf。更喜欢使用snprintf而不是sprintf. snprintfsprintf返回写入的字节数(不包括零终止字节),使用该计数。附加到缓冲区的典型用法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);
于 2020-07-04T08:49:30.670 回答