2017-02-09 24 views
-2

私はprint文を印刷非常に奇妙な配列の宣言の問題 - C

int main(int argc, char** argv) { 
    int numPassedIn = atoi(argv[1]); 
    printf("%d", numPassedIn); 
    pid_t kidPID[numPassedIn]; 

"FUNCNAME 4" を使用してこの関数を呼び出す "4"。意味をなさない

ただし、配列kidPIDは正しく初期化されていません(宣言されていますか?)。 pid_tを格納するためのスペースはありません。私は

int main(int argc, char** argv) { 
    int numPassedIn = atoi(argv[1]); 
    printf("%d", numPassedIn); 
    pid_t kidPID[4]; 

を読むためにコードを変更した場合

それはスペースを提供します。何が起きてる?前もって感謝します!

+1

は、なぜあなたは 'kidPID'が適切に割り当てられていないことだと思います宣言に相当しているのですか?静的または動的サイズの場合、配列は同じプロパティを持ちます。 2番目のバージョンでは持っていない最初のバージョンで何が問題になっていますか? (引数を渡さない限り!) –

+0

可変長配列はオプションの実装なので、コンパイラによってサポートされていない可能性があります。 –

+0

正しく割り当てられていないことをどのように知っていますか? – immibis

答えて

2

Cでは、配列内の要素の数が実行時に決定されるときに、可変長配列(VLA)を宣言できます。

したがってこの宣言

pid_t kidPID[numPassedIn]; 

変数numPassedInに格納された値に等しい要素の数と可変長配列が宣言されます。変数numPassedInの値が4に等しい場合、実際には(一部制限あり)この宣言は

pid_t kidPID[4]; 
+0

可変長配列は後方互換性のためにのみサポートされるようになりました。 –

+0

@WeatherVane新しいC標準ドラフトが公開されましたか? –

+0

AFAIKはC11です。オプション。 C99ではこれまで最高のものでした。明らかにそれ以上。 –

関連する問題