2013-12-13 1 views
-1

어떻게 얻을 수 있나요? (???); 감사합니다.함수에서 gets()를 사용하여 char * ch에 문자열을 할당하려면 어떻게해야합니까?

void getStr(**temp){ 
    gets(???); 
} 

void main(){ 
    char *ch; 
    printf("Enter a string: \n"); 
    getStr(&ch); 
    printf("main: %s\n", ch); 
} 

------ ------ 문자열을 입력 출력 : ABC 주 : ABC

+2

안녕하세요! gets 함수를 읽었습니까? 그것에 대해 명확하지 않은 점은 무엇입니까? – Derek

답변

2

gets 기능을 사용하지 마십시오. 오버런을 방지 할 수있는 방법이 없으므로 본질적으로 안전하지 않습니다 (사용자가 수락 할 준비가되어있는 것보다 많은 데이터를 입력 함). 실제로 2011 년 ISO C 표준에 의해 언어에서 제거되었습니다.

대신 fgets()을 사용해야합니다. 사용하기가 조금 더 복잡합니다 (한가지는 문자열에 줄 종결자는 '\n'입니다). 그러나 읽을 수있는 최대 문자 수를 지정할 수 있습니다.

getStr 함수는 아마도 char** 인수를 취할 필요가 없습니다. char*은 포인터를 수정하지 않으므로 포인터가 가리키는 배열로 데이터를 읽는 것이므로 수행합니다.

데이터를 읽으려면 char 배열을 할당해야합니다. 당신은 배열 개체를 선언 할 수 있습니다 :

char line[200]; // for example 

을하거나 공간을 할당 할 수 malloc를 사용합니다.

한 가지 더 : void main()이 잘못되었습니다. (컴파일러는 그것을 받아 들일 수 있지만 그것을 사용할 이유가 없다.) 올바른 정의는 int main(void)이다. void main()을 사용하라는 내용의 책을 가지고 있다면 C 언어를 잘 모르는 사람이 책을 저술했으며 더 심각한 오류가있을 수 있습니다.

comp.lang.c FAQ을 살펴보십시오.