2013-04-18 52 views
0

所以我typedef操作如下:固定長度陣列格式

typedef char array[25]; 

在我的代碼的地方我稱之爲scanf函數是這樣的:

scanf("%s",array); 

但我得到的警告%當我通過一個char *時,我期待char * [25]。有什麼辦法擺脫這個警告?

+2

與你發佈的內容有關的奇怪之處'array'是一個類型而不是對象。所以這不應該起作用。請向我們展示您的代碼的真實路線。 –

+0

GCC拒絕爲我編譯這個...這是你的實際代碼嗎?如果是這樣,它是如何編譯的? – Kninnug

回答

0

array是類型,不是一個對象。你不能把它作爲參數在scanf

array a; 
scanf("%s", a); 
+0

對不起,我已經聲明瞭一個類型數組的變量,可以說它的a。我使用的正確的scanf是scanf(「%s」,a),然後我得到警告。我真的很抱歉,如果編譯了上面的代碼,我會明確地得到一個錯誤。我現在能做些什麼來擺脫錯誤? – user2295150

+0

@ user2295150用這個更新你的問題 – MOHAMED

0

typedef定義一個數據類型,以便可以用它來定義與相同數據類型不同的變量。 喜歡:

typedef char employee[25]; 
typedef char customer[25]; 
employee a, b; 
customer y, z; 
printf("Enter first employee's name: "); 
scanf("%s",a); 
printf("Enter customer's name: "); 
scanf("%s",y); 

雖然數據類型是相同的,但定義它們是闡述事情。 所有你需要做的是:拍array a;然後scanf("%s",a);

希望你清楚核心! :)

0

我假設你的代碼簡稱...

的實際原因警告編譯器知道兩兩件事:你有一個char數組長度有限,而scanf函數會掃描許多字符在原始字符串中給出;可能會溢出爲其提供的陣列。

這是一個真正的問題:編譯器是非常正確的。

解決方案是更好地指定scanf格式。在這種情況下,我會建議使用「%24s」告訴scanf爲該格式元素讀取的最大字符數。

記住允許空終止 - 更好,明確ZAP陣列[LEN-1] 0

有可能是更好的方法來讀取的字符串比scanf函數。例如,查看一些基於標記的方法。

HTH,Ruth