从文本文件读取数据存入数组时出现指针转整数警告的原因咨询
为什么会出现「assignment makes integer from pointer without a cast」警告?
咱们先拆解这个警告的核心:你正在把一个指针类型的值,直接赋值给一个整数类型的变量,而且没有显式类型转换,编译器就会抛出这个警告。
具体到你的代码问题:
看这两行关键代码:
char arrRequest[100]; // arrRequest是char类型的数组,每个元素都是单个字符(本质是8位整数) arrRequest[i] = strRow; // 这里触发警告
strRow是char strRow[10];,在C语言里,数组名会被隐式转换成指向数组首元素的指针(也就是char*类型)。而arrRequest[i]是单个char(整数类型),你把一个指针(内存地址,本质是整数但类型不同)直接赋值给它,这就完全不匹配了——相当于你把一个房子的门牌号(指针)直接塞进了一个只能装单个字符的小盒子里,编译器当然会警告你。
你真正想要的应该是存储每行字符串,对吧?那得改两个地方:
调整数组的类型:如果要存储多个字符串,
arrRequest应该是字符串指针数组,或者二维字符数组:- 字符串指针数组:
char* arrRequest[100];(注意要确保每个指向的内存不会被覆盖,或者动态分配内存) - 二维字符数组:
char arrRequest[100][10];(提前分配好每个字符串的空间,适合固定长度的行)
- 字符串指针数组:
正确复制字符串:不能直接赋值数组名(指针),要用字符串复制函数,比如
strcpy:
比如用二维数组的话,代码改成:char arrRequest[100][10]; char strRow[10]; int i = 0; void request(){ // 加终止条件避免无限循环和数组越界 while (fgets(strRow, 10, fp) != NULL && i < 99) { strcpy(arrRequest[i], strRow); // 复制字符串到arrRequest的第i行 printf("value of %d is %s:\n", i, arrRequest[i]); i++; } }要是用指针数组,记得要给每个指针分配内存(比如用
strdup或者malloc+strcpy),不然会出现野指针问题:char* arrRequest[100]; char strRow[10]; int i = 0; void request(){ while (fgets(strRow, 10, fp) != NULL && i < 99) { arrRequest[i] = strdup(strRow); // 复制字符串并分配内存 printf("value of %d is %s:\n", i, arrRequest[i]); i++; } // 记得最后释放动态分配的内存 for (int j = 0; j < i; j++) { free(arrRequest[j]); } }
另外提个小建议:你的原代码是for(;;)无限循环,一定要加上终止条件(比如fgets返回NULL表示文件读完了),不然会越界访问数组,导致程序崩溃哦。
内容的提问来源于stack exchange,提问作者Hieu Tran
相关产品推荐
相关产品推荐

