gpt4 book ai didi

c - 为什么在将 malloc 与结构值一起使用时出现 -Wsign-conversion 编译器警告?

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:24 25 4
gpt4 key购买 nike

当编译代码访问结构中的常量以在 malloc 中使用时,我在使用 gcc -Wconversion sample.c 时收到 -Wsign-conversion 警告:

sample.c:12:45: warning: implicit conversion changes signedness: 'int' to 'unsigned long' [-Wsign-conversion]
unsigned char *numbers = malloc(s.value * 100 * sizeof(unsigned char));

1 warning generated.

带有警告的 C 代码是这样的:

#include <stdlib.h>
#include <stdio.h>

typedef struct
{
const int value;
} MyStruct;

int main(int argc, char *argv[])
{
MyStruct s = {5000};
unsigned char *numbers = malloc(s.value * 100 * sizeof(unsigned char));
printf("Address of numbers: %p\n", &numbers);
}

如果我不使用结构,而是直接提供值,则使用 gcc -Wconversion sample.c 时不会出现警告:

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
unsigned char *numbers = malloc(500 * 100 * sizeof(unsigned char));
printf("Address of numbers: %p\n", &numbers);
}

在使用 -Wconversion 标志时,将 malloc 与结构值一起使用的正确方法是什么?

最佳答案

您可以将结构声明更改为具有const unsigned int,或者只是将s.value 转换为unsigned int malloc() 函数,因为它需要无符号参数(准确地说甚至是 size_t)。

void *malloc(size_t size);

关于c - 为什么在将 malloc 与结构值一起使用时出现 -Wsign-conversion 编译器警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57752007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com