2016-09-24 10 views
0

char *の配列を初期化する方法を理解しようとしています。私はchar *[100]属性を持つ構造体を定義しました。私はその属性に文字列配列を割り当てた場合、私は以下に示されるエラー得た:Cで文字ポインタの配列を初期化

#include <stdio.h> 
#include <stdlib.h> 

#define MAXHIST 100 
struct rec 
{ 
    int i; 
    float PI; 
    char A; 
    char *arguments[MAXHIST]; 
}; 

int main() 
{ 
    const char name[5] = "-aefa"; 
    struct rec ptr_one; 
    // struct rec ptr_one; 
    (ptr_one).i = 10; 
    (ptr_one).PI = 3.14; 
    (ptr_one).A = 'a'; 
    (ptr_one).arguments = { "/bin/pwd", 0}; 

    printf("First value: %d\n",(ptr_one).i); 
    printf("Second value: %f\n", (ptr_one).PI); 
    printf("Third value: %c\n", (ptr_one).A); 

    // free(ptr_one); 

    return 0; 
} 

をコンパイル時に生成されたエラーがある:Cで

hmwk1-skk2142(test) > cc test.c 
test.c: In function ‘main’: 
test.c:23:27: error: expected expression before ‘{’ token 
    (ptr_one).arguments = { "/bin/pwd", 0}; 
+2

配列を割り当てることはできませんが。その要素に1を割り当てる。割り当てと初期化を混同しないでください。 – alk

+0

左辺値として配列を使用しています。 – ameyCU

+0

'ptr_one'はポインタではありません。ミスリーディングの名前は使用しないでください。 – Olaf

答えて

1

は、配列に値を割り当てます使用指標:また

ptr_one.arguments[0] = "/bin/pwd"; 

const char name[5] = "-aefa"; 

が間違っています。文字列の末尾にある0バイトの配列は、1項目大きくする必要があります。この行で

const char * name = "-aefa"; 
+0

Cで 'const car *'型を定義するのはなぜ間違っていますか? – acornagl

+0

'const char * name =" -abcd "'は間違っていません。 'const char name [5] =" -abcd "'が間違っています。 – RotatingPieces

+0

なぜ間違っていますか?配列の最後の要素が終了文字であると予想したので、 – acornagl

0

:確認して、6つの項目の長い、またはより良いあなたは配列の初期化と混乱の配列を割り当てている

(ptr_one).arguments = { "/bin/pwd", 0}; 

。実際、報告された行では、1つのポインタに複数の値を割り当てようとしています。

アレイの初期化段階で、(配列の初期化の意味と配列の構文を尊重して)実行しようとしていることを実行できます。

int a[3] = {1, 2, 3}; 

そうでない場合、あなたは、次のコードのようなものを使用することができ、ポインタの表記を使用して配列の要素の一つに値を割り当てる場合:

// assign to a[1] the value 42 
*(a + 1) = 42; 
関連する問題