求助,C语言,编译时提示 'int *' differs in levels of indirection from 'int [32][32]'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求助,C语言,编译时提示 'int *' differs in levels of indirection from 'int [32][32]'相关的知识,希望对你有一定的参考价值。

int *combine(int array[16],char *key,char *edition_source,char *text)

int last;
int ciphertext[32][32];
char keyword[32];
int row,col,arr,num,length; /* row col:ciphertext[row][col];arr:array[arr];num:text+num */
row=col=arr=num=0;
length=strlen(text);
length=strlen(key);
last=32-length;
if(last>0)

strcat(keyword,key);

for(row=0;row<32;row++)

for(col=0;col<32;col++)

if(arr>=16)
arr=0;
ciphertext[row][col]=*(text+num)+array[arr];
arr++;
num++;


return (ciphertext); /*这里提示warning C4047: 'return' : 'int *' differs in levels of indirection from 'int [32][32]'和warning C4172: returning address of local variable or temporary*/


include全了的,就不粘上来了
求指教!

这里,只是警告, 第一条就算了,忽略不会有问题

第二条这里有有意义了, 你把指向局部变量的指针返回后得到的值可能是不确定的

也就是说 ciphertext[32][32]; 这块内存是在栈中,函数退出后 可能会变化

这时应该用堆内存,或ciphertext空间由调用者申请
参考技术A 你返回的是二维数组,就是二级指针,定义函数可以定义为:
int **combine(int array[16],char *key,char *edition_source,char *text)
参考技术B 应该返回一维指针类型 但是你返回的是二维的指针追问

那该如何修改?谢谢

追答

int **combine(int array[16],char *key,char *edition_source,char *text)

以上是关于求助,C语言,编译时提示 'int *' differs in levels of indirection from 'int [32][32]'的主要内容,如果未能解决你的问题,请参考以下文章

C语言问题

c语言 编译错误

求助用C语言程序设计一个计算器

C语言截取字符串

c语言写scanf("%d",(int)&num);提示错误but argument 2 has type 'int'

C语言链表问题 DEVC++编译出error:too many arguments to function 'int deletNode()'