2011-10-20 45 views
0

讓我馬上說清楚,這是一個大學課程。我不能使用C++庫,只能使用標準C庫。不要建議我使用C++字符串或cin/cout,因爲這對我的這個任務不會有幫助。如何通過在C++中傳遞地址將scanf字符串傳遞給全局字符數組?

我的問題:我在主函數中有全局字符數組。我需要在函數foo()中將字符串傳遞給scanf()中的全局字符數組。一切都很好,問題是,scanf()函數似乎對它指向的全局字符數組沒有影響。我正在使用「地址」運算符(&)作爲參考書籍指示要執行的操作。也許,我不理解字符數組指針和scanf()「地址」(&)之間的關係。我覺得我到處尋找解決方案。

我已經在這個問題上花了幾個小時,所以我現在正在尋找專家的意見。

這裏是我的程序的簡化版本。

#include <stdio.h> 

void foo(char arr1[], char arr2[]); 

int main(void) 
{ 
    char arr1[20] = "initial"; 
    char arr2[25] = "second"; 

    foo(arr1); // <------- should change it to the string "second" upon scanf() 

    printf("Test Return Value: %s\n",arr1); // <---- returns "initial" (the problem) 

    printf("Enter a test value: "); 
    scanf("%s", &arr1); 

    printf("Test Return Value: %s\n",&arr1); 

// ---------------------- this code is not part of the issue 
fflush(stdin); 
getchar(); 
return 0; 
// ---------------------- 
} 
void foo(char arr1[], char arr2[]) 
{ 
    // there will be many returned values 

    printf("Enter a test value: "); 
    scanf("%s", &arr1); // <---------- the problem function (input < 20 chars) 
} 
+0

複製代碼時犯了許多錯誤:'arr2'從不使用,'arr'沒有聲明。 – Simon

回答

2
scanf("%s", &arr); // <---------- the problem function (input < 20 chars) 

應該

scanf("%s", arr); // <---------- the problem function (input < 20 chars) 

使用C IO功能的危險!

+0

抱歉沒有1的arr,我以爲我在發佈之前解決了這個問題。謝謝。我不敢相信這很容易。 – SacWebDeveloper

+0

通過IO,犯下愚蠢的錯誤通常非常容易。這就是爲什麼我們有流庫,並真正推薦使用strcpy之類的東西。好的編碼器是懶惰的編碼器 - 讓自己變得簡單! – Ayjay

0

scanf功能正確的語法是:

scanf("%s", arr); 

你只需要&操作簡單變量,不能用於數組/指針。

除此之外,您將不得不糾正不當使用arr1,arr2arr。部分代碼使用前兩個數組,而後者的其他部分使用前兩個數組。

2

雖然你已經更新句話解決我有,你可能要考慮一些觀察:
1.獲得scanf & printf通話擺脫&arr1之前(如Ayjay &丹尼斯提到已解決你的問題)
2.正確的參數數量未傳遞到函數foo(如Adrian Cornish所述)。因此代碼不會編譯。
3. fflush(stdin);是未定義的行爲。 fflush僅適用於輸出流。請不要與stdin一起使用。詳情請參閱this SO question
4.如果這是一個C++源代碼,請使用#include <cstdio>而不是#include <stdio.h>
請始終編譯帶有完整編譯器警告的代碼並解決所有這些問題。這是一個很好的做法。 :)
希望這有助於!