2016-11-26 3 views
-1

문제는 포인터의 배열을 다루는 것이 실제로 뜨겁지 않다는 것입니다. 내가하는 일은 배열의 주소로 전달되므로 주소가 항상 들어갑니다. 모든 위치, 마지막 입력. 하지만 * 연산자를 사용하면 첫 번째 문자 만 전달합니다. 그래서 어떻게할까요 ??포인터의 배열에 입력 문자열

int main(void) { 

    void prompt_str(const char *str[], char *const copy); //prototype 

    const char *str[ 20 ]= { '\0' }; 
    const char *copy= 0; 

    //prompt stringa 
    prompt_str(str, &copy); 

} //end main 

void prompt_str(const char *str[], char *const copy) { //definition 

    size_t n_str= 0, i= 0; 

    do { 
     printf("Insert a string\n:"); 
     fgets(copy, 100, stdin); 
     i= (strlen(copy)- 1); //get length 
     copy[ i ]= '\0'; //remove \n 

     str[ n_str++ ]= copy; //put string into pointer of array 

    } while (n_str< 3); 

} 
+1

,'->'문자 복사 [100]' –

+0

@ KeineLust 사실이 아니야 .. 복사본에 원인이 내가 문자열을 얻을, 난 정의 된 배열을 사용하지 않으려 고, 그것을 낭비 공간 원인, 숯불에 대한 포인터와 함께, 그걸 입력 요소를 소요됩니다. – dnt994

+1

좋아요, 주소에 100 바이트를 저장하는 행운을 빕니다. –

답변

1

포인터 개념에 대한 오해가있는 것 같습니다. 당신이

const char *copy= 0; 

을 수행 할 때

당신은 단지 pointer를 얻을. 문자열 보관을위한 메모리가 없습니다.

대신

char copy[100]; 

을 할 수 있습니다. 이렇게하면 문자열 (100 자 미만)을 보유 할 수있는 메모리가 생깁니다. 또한 함수를 호출 할 때 포인터 인 경우 copy을 사용할 수 있습니다.

이 또는 당신이 좋아하는 동적 메모리를 사용할 수 있습니다 : 입력,`const를 숯불 * 복사 = 0을 저장하기 위해 당신은 공간이없는

char* copy = malloc(100 * sizeof(char)); // Allocate memory 

// ... code 

free(copy); // Release memory 
+0

그건 사실이 아니야. 사실 내가 디버깅 할 때, 복사는 내가 입력 한 문자열을 가지고있다. "ciao"를 입력하면 "ciao"가되지만 str에 전달하면 위 코드와 같이 전달하면 참조로 전달되므로 복사본을 변경할 때마다 전체 str을 변경하십시오. 이게 내 문제 야, 전체 사본을 가치에 따라 전달하고 싶다. 내 코드를 시험해 보면 알 수 있습니다. – dnt994

+0

@ dnt994 아, 맞습니다. 컴파일러에서 경고를 확인 했습니까? 함수 호출에 '호환되지 않는 포인터 유형'이 있습니다. BTW : "Keine Lust"와 나는 도움을 구하려고 노력했지만 입력 내용을 진지하게 받아들이는 대신에, 우리는 잘못된 것이라고 주장합니다. 왜? – 4386427

+0

나는 내가 믿는 것을 설명하기 위해 tryna 였고, 그것이 맞다는 것을 짐작할 수 있습니다.하지만 물론 진실로 당신이 말한 것을 취해서, 당신의 도움을 받아 볼 것입니다. 시도하자마자이 메시지를 편집하겠습니다. 심지어 아직 감사하지 않는 경우에도, 내 것은 오만하지 않았습니다 :). – dnt994

관련 문제