c – 是否可以将char [] []传递给请求char **的函数?

c – 是否可以将char [] []传递给请求char **的函数?,第1张

概述我试图调用一个以char **作为参数的函数.它的工作是填充一个字符串数组(即char *数组).我知道字符串的最大长度,我可以传递最大数字作为另一个参数填充,所以我希望堆栈像这样分配: fill_my_strings(char** arr_str, int max_str); // function prototypechar fill_these[max_strings][max_char 我试图调用一个以char **作为参数的函数.它的工作是填充一个字符串数组(即char *数组).我知道字符串的最大长度,我可以传递最大数字作为另一个参数填充,所以我希望堆栈像这样分配:

fill_my_strings(char** arr_str,int max_str); // function prototypechar fill_these[max_strings][max_chars_per_string]; // allocating charsfill_my_strings(fill_these,max_strings); // please fill them!

当然,我得到“无法将char [max_strings] [max_chars_per_string]转换为char **”错误.

我知道这是一个微妙的(或不那么微妙的)问题,我理解数组和指针之间的区别.我只是不确定为什么不可能将这块内存传递给想要char **的东西并让它填充我的堆栈分配的字符.有人可以解释一下这是否可能,或者如果没有,为什么不呢?

是否可以在不调用malloc / new的情况下调用这样的函数?

解决方法 假设你有n个指针指向m-1个最大字符的字符串(m个字符包括NulL).
所以,在纯C:
sizeof(char [n] [m])将返回n * m.
sizeof(char **)将返回架构中指针的大小,可能是32(如果是x86)或64(如果是x86_64).

char [n] [m]实际上连续分配n * m字节. char **分配一个指针.该指针引用* n字节的内存条带.这n个指针中的每一个都指向m个字符的内存条带.

因此,考虑到sizeof(char)== u,如果你声明char a [n] [m],当你使用[i] [j]时,编译器会理解*(a i * m * u j * u).
因此,考虑到sizeof(char *)== w,如果你声明char ** a,编译器会理解((a i * w)j * w).

完全不同的数据管理.

你可以做的关闭处理你的特殊情况是创建一个char **变量,并用堆栈分配矩阵的地址填充它.

char **tmp = malloc(max_strings * sizeof(char *));int i;for(i = 0; i < max_strings; i++){    tmp[i] = &(fill_these[i][0]); //you probably can't reference a char[][] with a single index - not confirmed}
总结

以上是内存溢出为你收集整理的c – 是否可以将char [] []传递给请求char **的函数?全部内容,希望文章能够帮你解决c – 是否可以将char [] []传递给请求char **的函数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1214354.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存