2013-02-15 81 views
0

即時編寫一個程序,它將用戶輸入的字符串存儲在一個數組中。然後我將數組傳遞給一個函數來打印第二個元素。但是,我意識到程序崩潰時,執行功能內的打印。編寫一個函數來打印存儲在數組中的字符串

我的示例代碼如下:

main() 
{ 
int num, count; 
char strStorage[10][10]; 

printf("\nEnter how many strings: "); 
scanf("%d" , &num); 
fflush(stdin); 

for (count = 0 ; count < num ; count++) 
{ 
    printf("Enter a string: "); 
    gets(strStorage[count]); 
    fflush(stdin); 
} 

//This works 
printf("%s", strStorage[2]); 

printMyArray(strStorage); 
} 

void printMyArray(char *myArray[ ]) 
{ 
    //This doesnt work 
    printf("%s", myArray[2]); 

} 

林,以瞭解數組是如何被傳遞給函數做這個。如果有人能幫助我,請欣賞它。

感謝

+0

您是否收到任何錯誤消息?你在使用什麼環境? GCC,Visual Studio?還要考慮,你正在使用固定大小的數組。如果你放置超過9個字符(不要忘記尾部'\ 0',你會覆蓋數組內部的邊界)。在C中,您不會傳遞數組,而是實際上指向變量的指針或地址。 – 2013-02-15 11:08:48

+0

注意:您不應該使用'gets',而應該使用指定'stdin'作爲輸入流的'fgets'。 – JBL 2013-02-15 11:09:58

+0

該程序崩潰,因爲我得到Windows錯誤報告thingy。 – kype 2013-02-15 11:26:45

回答

0

的問題是,你應該通過你的雙數組作爲雙陣列,而不是作爲一個指針數組。

void printMyArray(char *myArray[ ]) 

成爲

void printMyArray(char myArray[][10]) 
+0

試過了,它沒有奏效。據我所知,當我打電話給 printMyArray(strStorage);傳遞的是地址,而不是整個數組。 所以在函數中,參數(或參數)必須作爲指針存儲,因爲實際傳遞的是地址,而不是數組。 我可能是錯的 – kype 2013-02-15 11:32:12

0

你有幾個問題與您的代碼:

A)您對10串預留空間,但用戶可以選擇輸入超過10個,而你不要阻止他們。 B)用戶可以輸入超過9個字符的字符串(您設置的最大值)。

C)作爲其它的回答將說char* []是不一樣的char [][10]

+0

是的,10個字符串thingy只是暫時測試函數。我只是想讓陣列正確傳球。 謝謝 – kype 2013-02-15 11:29:18

0

char *myArray[ ]聲明指針數組。所以,每個元素都是一個雙指針。

要訪問需要

printf("%s", *myArray[2]); 

這裏的元素,*myArray[2]相當於*(*(myArray + 2))其中*(myArray + 2)指向指針陣列中的第二指針,並添加另一*訪問值由該指針指向。

+0

我曾嘗試過,並沒有工作。我想問題是數組正在傳遞。 感謝您的輸入 – kype 2013-02-15 11:28:35

相關問題