моей первоначальной проблемой является то, что я хочу написать функцию, которая может вернуть мне два значения. Я знаю, что могу это сделать, передав адрес двух аргументов функции и непосредственно вычислив их значения внутри этой функции. Но при проведении эксперимента происходит нечто странное. Значение, которое я получил внутри функции, не может пережить основную функцию:возвращают несколько значений из функции в 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 ...' ... ' build (& cm) '... –
Вы [указатель на указатель] (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'. –