2017-06-29 37 views
-1

以下代碼將數組作爲參數從主進程(稱爲process)傳遞到另一個進程(稱爲subprocess)。它模擬我想要在自己的代碼中實現的行爲:subprocess用正確的字符串填充字符串數組,然後將它們返回到process以進行...處理。通過參數(C語言)傳遞數組後刪除警告

#include <stdio.h> 
#include <string.h> 

void preprocess(char input[10][10]) { 
     int i; 
     char temp[10]; 
     for (i = 0; i < 10; i++) { 
       scanf("%s", &temp); 
       strcpy(input[i], temp); 
     } 
} 

void process() { 
     int i; 
     char strings[10][10]; 
     preprocess(strings); 
     for (i = 0; i < 10; i++) { 
       printf("%s\n", strings[i]); 
     } 
} 

int main() { 
     process(); 
     return 0; 
} 

我的問題:這段代碼會產生一個警告,我不是100%確定的。有人可以幫我刪除警告並清除這個餌雷陷阱代碼嗎?

編輯:警告是:

warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[10]' 
+0

什麼是警告? –

+0

@Paul它是關於scanf預期的參數類型 - 它應該是char *而不是char(*)[10]。而且,人們在貶低正確的,誠實的問題時究竟是什麼? -_- – Chris

+0

可能因爲你沒有在你的問題中包含警告,所以沒有人可以告訴你有什麼問題。 –

回答

0

你傳遞給scanf參數不正確。格式說明符%s需要一個指向數組char的第一個元素的指針。你傳遞的是數組的地址。

scanf呼叫中刪除運營商地址&。當一個數組傳遞給一個函數時,它會衰減到一個指向第一個元素的指針。

scanf("%9s", temp); 

格式說明符中的數字給出了要讀取的最大字符數。這可以防止temp的潛在緩衝區溢出。

+0

謝謝你的最後一個提示,這可能會有所幫助。 – Chris

0

你應該使用:

scanf("%s", temp); 

scanf("%s", &temp);