구조체 함수를 실행후 리턴 했을때 값이 저장되어있지 않습니다.
캐릭터
질문 제목 :command에 예를들어 find add 를 쳤을 시 add 값을 구조체 인자로 받아 사용하는 함수를 만들었습니다. 근데 메인함수에서 함수를 불러낸 다음, 그 구조체의 인자로 값이 들어와 있지 않습니다.. 빨간색 줄 친부분을 예로서 실행한 부분입니다. 함수 안에서는 값이 제대로 출력되어집니다.
이렇게 되는 이유에 대해서도 설명해 주시면 감사하겠습니다...
질문 내용 :
#include stdio.h
#include stdlib.h
#include string.htypedef struct com_data{ // command관련 구조체
int linenum; // 라인번호
char *str1; // 첫번째 문자열
char *str2; // 두번째 문자열
} com_data;com_data* input_data(com_data *input); // command 명령어 파싱작업int main()
{
com_data* input = (com_data*)malloc(sizeof(com_data));input_data(input); // 입력창을 불러내어 find add를 쳤을 때, input-str1 의 값은 add가 되어서 return되어집니다.printf(word:%s \n,input-str1); // %s 값이 공백으로 나옵니다..
}
com_data* input_data(com_data *input)
{
char str[100];
char *token,*inputtoken; printf(명령 입력 );
fgets(str,sizeof(str),stdin);
token = strtok(str, );
inputtoken = token;
if(strcmp(token,find) == 0){
token = strtok(null, );
input-str1 = token; // find 이후에 오는 문자열을 str1에 저장
return input;
}
if(strcmp(token,replace) == 0){
token = strtok(null, ); if(strcmp(token,at) == 0){
token = strtok(null, );
input-linenum = atoi(token); // replace at 다음 오는 문자형 숫자를 숫자형으로 바꾸어서 linenum에 저장
token = strtok(null, );
input-str1 = token; // 첫번째 문자열을 str1에 저장
token = strtok(null, );
input-str2 = token; // 두번째 문자열을 str2에 저장
return input;
} if(strcmp(token,all) == 0){
token = strtok(null, );
input-str1 = token;
token = strtok(null, );
input-str2 = token;
return input;
}
}
if(strcmp(token,sort) == 0){
token = strtok(null, );
input-str1 = token; // sort 다음 문자열을 str1에 저장(파일이름)
return input;
}
return;
}
-
다가
com_data* input = (com_data*)malloc(sizeof(com_data)); 에서 input자체를 포인터로 지정한것같은데.. 제가 잘못 알고 사용하고있는건지..
main 함수에서 input = input_data(input); 로 받아도 같은 결과더라구요.. -
곰돌츼
음...코드 자세히 보지않았는데
일단 data함수에 입력을 그냥 input으로.주면 call by value 되지 않나요?
그리고 return 하셔도 main함수에서 그 리턴값 받는 변수가 없는 것 같아요