我的原始问题是,我想编写一个函数,可以返回两个值。我知道可以通过将这两个参数的地址传递给函数,并在函数内直接计算它们的值来实现。但是在进行实验时,发生了一些奇怪的事情。在函数内获取的值无法传递到主函数:
#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...
...build(&cm)
...char **ch...
...*ch = malloc...
...strcpy(*ch...
...build(&cm)
... - ta.speot.isn
,并且该函数想要给n
赋新值 (n = ...
),那么就需要一定程度的间接性,也就是说,你需要一个指向n
的指针 (typeof_n*)。在 C 中,所有的函数参数都是按值传递的,也就是说会进行复制。因此,由于你传入了一个char*
,你需要一个指向其中一个的指针,也就是一个char**
。然后你可以写*n = malloc(size);
。另外,sizeof char
被定义为1
,所以在你的malloc
调用中不需要它。 - Ed S.