【发布时间】:2014-01-25 07:03:20
【问题描述】:
我最初的问题是我想编写一个可以返回两个值的函数。我知道我可以通过将两个参数的地址传递给函数来做到这一点,并直接在该函数内计算它们的值。但是在做实验时,会发生一些奇怪的事情。我在函数中得到的值无法保存到主函数中:
#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)... -
这样想;如果一个函数接受一个参数
n并且该函数想要为n(n = ...) 分配一个新值,则需要一个间接级别,即,您需要一个指向n(typeof_n*) 的指针。 C 中的所有函数参数都是按值传递的,即复制。所以,既然你传入了char*,你需要一个指向其中之一的指针,即char**。然后你可以写*n = malloc(size);。此外,sizeof char被定义为1,因此在您的malloc调用中不需要它。
标签: c function return-value