2017-11-05 1 views
2

필자는 주 함수에서 while 루프를 사용합니다. 여기서 사용자는 문자열을 입력해야합니다.이 문자열은 일부 구조체의 텍스트 필드에 할당되는 함수로 전달됩니다.C : 이미 설정된 값을 변경하지 않고 동일한 char * []를 여러 번 사용하려면 어떻게해야합니까?

int main(void){ 
char text[255]; 
while(0) { 
    scanf("%s", text); 
    someFunction(text) 
    } 
} 
someFunction(char* text){ 
someStruct str = malloc (sizeof (str)); 
str.textfield = text; 
} 

는 지금, 나는 문자 배열 참조에 의해 전달되는 등, 따라서 someStruct의 생성 된 모든 인스턴스가 동일한 텍스트 필드, 스캔 및 "텍스트"로 저장된 즉, 마지막 하나를 가지고 끝날 것이라는 점을 알고있다. 그러나이 문제를 어떻게 피할 수 있습니까?

+2

구조체 필드에'text'를 할당하면 단지 포인터 만 복사되기 때문에'text'의 후속 사용으로 덮어 쓰게됩니다. 대신 문자열의 복사본을 만들기 위해'strdup (text)'를 사용하십시오 (이것은 단지'malloc'을 호출 한 다음 그 문자열을 새로 할당 된 저장소에 복사합니다). –

답변

1

문자를 malloc 문자열에 복사해야합니다. 그것을 할 수있는 가장 간단한 방법은 당신의 textfield로 문자열을 strdup()하는 것입니다

str.textfield = strdup(text); 

당신은 제거 할 것입니다 귀하의 malloc() 당신이 이런 짓을합니다. strdup()은 암시적인 malloc()을 수행합니다.

관련 문제