gpt4 book ai didi

C: 类型转换警告

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

我有一个代码,但是在编译的时候有一个警告,这是警告:

1_redis.c: In function \342\200\230main\342\200\231:
1_redis.c:131:23: warning: assignment makes integer from pointer without a cast
[enabled by default]

它说赋值从指针生成整数而不进行强制转换,但是cFilelQueryData都是char*类型,为什么?

#define MAX_LINE_NUM 8000000
#define EACH_THREAD_NUM 10000


long i,posF,posDB;
for (i=0;i<DB_NUM;i++) { lQueryPerDB[i] = 0; }
char *lQueryData = (char *)malloc(DB_NUM*MAX_LINE_NUM*sizeof(char));

lLineCount = lFileLen / lLineLen;
for (i=0;i<lLineCount;i++) {
posF = i * lLineLen;
iDB = get_DB(cFile[posF]);
posDB = iDB * MAX_LINE_NUM + lQueryPerDB[iDB];
lQueryData[posDB] = &cFile[posF]; // this line have warning!!!!
lQueryPerDB[iDB]++;
}

最佳答案

如果 cFile 是一个 char *,像 cFile[posF] 一样索引它与做 *(cFile + posF),或者“给我 posF 从数组开头开始放置的任何值。”您的地址运算符 (&) 是不必要的,如果不是,它可能与您想要的相反(您想要取消引用 — * —使用下标符号自动为您完成)。

正如其他人所建议的,正确的代码最有可能是:

lQueryData[posDB] = cFile[posF];

您收到特定警告的原因是因为使用 &cFile[posF] 获取了 中字符的地址(即 指向 的指针) cFileposF。但是,当您随后尝试将其分配给 lQueryData 数组中的某个位置时,它必须首先(在内部)将其转换为标量类型。指针只是一个索引到内存中的数字,因此当用于除了“指向”事物之外的任何东西时,它只是一个整数。因此,您所拥有的是从指针生成一个整数,而无需显式强制转换。

您可能会考虑使用 clang 进行编译而不是(我认为是)GCC 如果您可以访问它,它有更易于访问的错误消息。例如,上面代码的错误消息是:警告:指向整数转换的不兼容指针分配给具有类型“char *”的表达式的“char”;删除 &(用一个小的视觉指针指向违规的“&”符号)。

关于C: 类型转换警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889580/

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