내 원래 문제는 내가 두 값을 반환 할 수있는 함수를 작성하고 싶습니다. 두 인수의 주소를 함수에 전달하고 해당 함수 내에서 직접 값을 계산하여이 작업을 수행 할 수 있음을 알고 있습니다. 그러나 실험을 할 때 이상한 일이 일어납니다. 나는 함수 내에서 얻었다 값은 주요 기능에 살아남을 수 없습니다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);
}
위의 프로그램은 그냥 쓰레기를 출력합니다. 그래서 나는 여기서 무엇이 잘못되었는지 알고 싶다. 결국, 나는 원래 명령 argv에서 나에게 두 개의 명령을 구문 분석 할 수있는이 parse(char **argv, char **cmd1, char **cmd2)
과 같은 것을 원한다. 아무도 조금 설명 할 수 있다면 좋을 것 같습니다. 고마워.
'문자 채널 ** ...'...'* 채널 = malloc에 ...'...'strcpy를 (* 채널 ...'...' 빌드 (& cm)'... –
당신은 [포인터 포인터 필요] (http://stackoverflow.com/questions/18306935/need-of-pointer-to-pointer/18307020#18307020) –
이런 식으로 생각하십시오. 함수가 인수'n'을 취하고이 함수가'n '('n = ...')에 새로운 값을 할당하고자한다면, 간접적 인 수준이 필요합니다. 즉'n'에 대한 포인터가 필요합니다 (typeof_n *). C의 모든 함수 인수는 값으로 전달됩니다. 즉, 복사본이 만들어 지므로, n''char *', 그 중 하나, 즉'char **'에 대한 포인터가 필요합니다. 그런 다음'* n = malloc (size);'라고 쓸 수 있습니다. 또한,'sizeof char'는'1'로 정의되어 있으므로'malloc' 호출에서 그 값을 사용할 필요가 없습니다. –