2016-11-26 69 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

你沒有足夠的空間來存儲輸入,'爲const char *副本= 0;' - >'字符複製[100];' –

+0

@KeineLust,這是不正確的..在複製中的原因我得到的字符串,我不想使用定義的數組,使其浪費空間,指向一個字符,它只需要我輸入它的元素。 – dnt994

+1

好的你是對的,祝你好運存儲100個字節到一個地址:) –

回答

1

您似乎對指針概念有誤解。

當你

const char *copy= 0; 

你只能得到一個pointer。你沒有拿到任何內存來存放一個字符串。

你可以做

char copy[100]; 

代替。這將爲您提供用於保存字符串的內存(少於100個字符)。此外,您可以使用copy作爲調用函數時的指針。

或者您可以使用動態內存,如:

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

// ... code 

free(copy); // Release memory 
+0

這不是真的..事實上,當我調試時,副本有我輸入的字符串。如果我輸入「ciao」,副本有「ciao」,但是,當我將它傳遞給str時,如果我像上面的代碼那樣傳遞,它是通過引用傳遞的,所以每次我更改副本時,都會更改整個str。這是我的問題,我想通過價值傳遞整個副本。試試我的代碼,你會看到它。 – dnt994

+0

@ dnt994噢,是的,這是真的......你檢查了編譯器的警告嗎?你在函數調用中有'不兼容的指針類型'。順便說一句:「Keine Lust」和我都試圖提供幫助,但不是認真對待我們的意見,而是聲稱我們錯了。爲什麼? – 4386427

+0

我試圖解釋我相信什麼,我猜想它是真的..但是當然我會認真對待你說的,我會嘗試你的任何幫助。我會盡快編輯此消息。即使如果還沒有,謝謝,我的不是arogance :)。 – dnt994