c/c++开发分享C – 从函数返回数组

我正在尝试创建一个在C中返回字符串数组的函数。我在网站上查看了一些其他问题并尝试了一些解决方案,但似乎没有任何效果。 我已经尝试过(1)只是更改函数来更改数组内容而不是返回它,我已经尝试过(2)显式返回arrayz,但似乎都不起作用。 方法#1:在一个文件中,function:

int getArray(int num, char** array) { int i; for (i = 0; i < num; i++) array[i] = "whatever"; return 0; } 

在另一个文件中,我调用该函数:

 char** array = malloc(sizeof(char*) * num)); getArray(num, files); 

当我尝试打印数组文件的内容时,没有任何显示。 方法#2:在一个文件中,function:

  char** getArray(int num) { int i; char** array = malloc(sizeof(char*) * num)); for (i = 0; i < num; i++) array[i] = "whatever"; return array; } 

在另一个文件中,我调用该函数:

  char** files = getArray(num); 

再次,当我尝试打印文件的内容时,没有任何显示。

我已经检查过,并且正在定义getFiles()的头文件已包含在我进行调用的文件中。 我不确定发生了什么。

    您需要为字符串实际分配空间。 您只是为指向字符串的指针分配内存。 在您提供的示例中,您可以使用strdup任何字符串分配空间。 像这样:

     int getArray(int num, char** array) { int i; for (i = 0; i < num; i++) array[i] = strdup("whatever"); return 0; } 

    您将数组命名为“array”,而不是“files”:

     char** array = malloc(sizeof(char*) * num)); getArray(num, files); 

    尝试

     getArray(num, array); 

     char** array = malloc(sizeof(char*) * num)); 

    这里为num char指针分配内存,但不存储num字符串。 你也需要为字符串分配内存。 即你存储的“无论什么”。
    你不能分配一个字符串,

      array[i] = "whatever"; 

    你应该用,

     strcpy(array[i],"whatever"); 

    我不知道你要做什么。 但我想你只是喜欢这样。

     #include  char** getArray(int num) { int i; char** array = malloc(sizeof(char*) * num); char* whatever = "whatever"; for (i = 0; i < num; i++) { array[i] = whatever; // array[i][0] = '0' + i;//Comment out because "whatever" is now constant that is immutable. So you can't change it. } return array; } main(){ char** arr; int i; arr = getArray(10); for(i=0; i<10; i++) { printf("addr=%d, val=%sn",arr[i], arr[i]); } } 

    输出:

     addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever addr=39075716, val=whatever 

    这个可以吗? 在上面的例子中, arr[i]是只读的,只指向一个存储空间。 偶尔这会非常有效。

    但我想你想这样做。

     #include  char** getArray(int num) { int i; char** array = malloc(sizeof(char*) * num); char* whatever; for (i = 0; i < num; i++) { whatever = malloc(sizeof(char) * (strlen("whatever")+1)); strcpy(whatever, "whatever");//Now you can change "whatever". Because you created new readable-writable memory space by using malloc. array[i] = whatever; array[i][0] = '0' + i;//Now You can change array[i]. } return array; } main(){ char** arr; int i; arr = getArray(10); for(i=0; i<10; i++) { printf("addr=%d, val=%sn",arr[i], arr[i]); } } 

    输出:

     addr=-356501104, val=0hatever addr=-356501088, val=1hatever addr=-356501072, val=2hatever addr=-356501056, val=3hatever addr=-356501040, val=4hatever addr=-356501024, val=5hatever addr=-356501008, val=6hatever addr=-356500992, val=7hatever addr=-356500976, val=8hatever addr=-356500960, val=9hatever 

    现在你可以改变arr[i]因为你使用了malloc并为新字符串创建了内存空间(“xhatever”)。

    我希望它有所帮助。 🙂

      以上就是c/c++开发分享C – 从函数返回数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545986.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注