我最初的问题是我想写一个函数,可以返回两个值。我知道我可以通过将两个参数的地址传递给该函数并直接计算它们在该函数内的值来完成。但是当做实验时,会发生一些奇怪的事情。我在函数里面得到的值无法生存到主函数中:从函数返回多个值C
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void build(char *ch){
ch = malloc(30*sizeof(char));
strcpy(ch, "I am a good guy");
}
void main(){
char *cm;
build(cm);
printf("%s\n", cm);
}
上面的程序只是打印出一些垃圾。所以我想知道这里有什么问题。最终,我想要这样的parse(char **argv, char **cmd1, char **cmd2)
,它可以从原始命令argv中为我解析出两个命令。如果有人能够解释一点,那将会很棒。非常感谢。
'char ** ch ...'...'* ch = malloc ...'...'strcpy(* ch ...'...'建立(&厘米)'... –
你[需要指针指针](http://stackoverflow.com/questions/18306935/need-of-pointer-to-pointer/18307020#18307020) –
想想这样;如果一个函数接受一个参数'n'并且所述函数想为'n'('n = ...')赋值一个新值,那么需要一个间接级别,也就是说,你需要一个指向'n'的指针(typeof_n *)。所有在C中的函数参数都是按值传递的,也就是复制一次。所以,既然你传给我在'char *'中,你需要一个指向其中之一的指针,即'char **'。然后你可以编写'* n = malloc(size);'。此外,'sizeof char'被定义为'1',所以在'malloc'调用中不需要这么做。 –