2017-06-29 32 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%確信していません。誰かが私に警告を取り除き、ブービートラップのこのコードをクリアするのを助けることができますか?

EDIT:警告だった:

あなたが使用する必要があります
warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[10]' 
+0

警告は何ですか? –

+0

@Paulそれはscanfによって期待される引数の型に関するものです - それはchar *でなくchar(*)[10]でなければなりません。また、正しい、正直な質問をdownvoting人々と地獄は何ですか? -_- – Chris

+0

おそらくあなたの質問に警告が含まれていなかったので、あなたは何を持っているのか誰にも分かりません。 –

答えて

0

あなたはscanfに渡すパラメータが正しくありません。 %sフォーマット指定子は、配列の最初の要素へのポインタがcharであると想定しています。あなたが渡しているのは配列のアドレスです。

呼び出しからアドレス演算子&を削除します。配列が関数に渡されると、配列は最初の要素へのポインタに減衰します。

scanf("%9s", temp); 

フォーマット指定子の数字は、読み取ることができる最大文字数を示します。これにより、潜在的なバッファオーバーフローが防止されますtemp

+0

最後のヒントをいただきありがとうございます。おそらく参考になるでしょう。 – Chris

0

scanf("%s", temp); 

ない

scanf("%s", &temp); 
関連する問題