2016-08-16 10 views
-3

私は(この例では)配列内で購入するアイテムの名前を含む構造体を作成しようとしています。これは私がやろうとしていることの単なる簡単な例です。 私はこの方法でそれを学んだので値を宣言するためにstrcpyを使用しますが、それがメソッドの中で最高の場合はありません。Cの構造体内でマトリックスが機能しますか?

#include<stdio.h> 
#include<string.h> 
typedef struct Grocery_list{ 

    char item_name[2]; 
    double item_info[2][2]; 

}Grocery; 


int main(){ 

Grocery market; 
strcpy(market.item_name[0], "Apple"); 
strcpy(market.item_name[1], "Sugar"); 
strcpy(market.item_info[0][0],200); //apple weight 
strcpy(market.item_info[1][0], 3); //apple price 
strcpy(market.item_info[0][1], 300); 
strcpy(market.item_info[1][1], 4); 

printf("%f \n",martket.item_info[1][1]); 

return 0;} 

エラーが

明らか
teste.C: In function ‘int main()’: 
teste.C:14:27: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive] 
strcpy(market.item_name[0], "Apple"); 
         ^
In file included from teste.C:2:0: 
/usr/include/string.h:129:14: error: initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive] 
extern char *strcpy (char *__restrict __dest, const char *__restrict __src) 
      ^
teste.C:15:27: error: invalid conversion from ‘char’ to ‘char*’ [-fpermissive] 
strcpy(market.item_name[1], "Sugar"); 
         ^
In file included from teste.C:2:0: 
/usr/include/string.h:129:14: error: initializing argument 1 of ‘char* strcpy(char*, const char*)’ [-fpermissive] 
extern char *strcpy (char *__restrict __dest, const char *__restrict __src) 
      ^
teste.C:16:35: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[0][0],200); 
           ^
teste.C:17:34: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[1][0], 3); 
           ^
teste.C:18:36: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[0][1], 300); 
            ^
teste.C:19:34: error: cannot convert ‘double’ to ‘char*’ for argument ‘1’ to ‘char* strcpy(char*, const char*)’ 
strcpy(market.item_info[1][1], 4); 
           ^
teste.C:21:16: error: ‘martket’ was not declared in this scope 
printf("%f \n",martket.item_info[1][1]); 
       ^

あり、私はGoogleでの回答や解決策を探したが、私が試したすべてのものは、単に他のエラーの原因となったりしても同じ。私は一般的にプログラミングで新しいので、私はそれらのエラーの意味を知らない。

は、メンバーitem_nameが、それは文字列の配列文字の配列ではありませんが、それだけですべての文字列を持っていることを覚えて、単一の文字を保持することができますちょうど単一の文字列(だ、事前に

+0

これは構造体とは関係ありません。あなたは文字列と 'strcpy'を完全に間違って使用しています。 – user2357112

+0

'strcpy'はコピー用です**文字列**。 –

+0

'market.item_name [0]'は文字です。 'strcpy'は' char * 'や' char [] '(おそらく不正確かもしれません)型のバッファにコピーするバッファを必要とします。 – nbro

答えて

0

3つの問題:

構造体に文字列の配列がありません。それは文字の配列を持っています。あなたは、このような配列を持つようにitem_nameに余分な次元を追加する必要があります。

typedef struct Grocery_list{ 

    char item_name[2][50]; 
    double item_info[2][2]; 

}Grocery; 

また、あなたが数値をコピーしようとするstrcpyを使用しています。この関数は文字列のコピーに使用されます。代わりに、単純な代入行い、この機能を使用する:

market.item_info[0][0] = 200; //apple weight 
market.item_info[1][0] = 3; //apple price 
market.item_info[0][1] = 300; 
market.item_info[1][1] = 4; 

最後に、あなたはあなたのprintfの文にタイプミスがあります

printf("%f \n",martket.item_info[1][1]); 

それは次のようになります。

printf("%f \n",market.item_info[1][1]); 
+0

ありがとうございます!私は今、それが私の愚かな間違いだったと思っています!それは今働きました。このような小さなことにあなたの時間を無駄にして申し訳ありません。 –

+0

@VictorRM喜んで私は助けることができます。あなたが役に立つと思ったら、[この回答を受け入れる](http://stackoverflow.com/help/accepted-answer)を自由に感じてください。 – dbush

0

をありがとう特別なターミネータ文字)。

char item_name[2][64]; // Two strings, each can hold 63 characters 

メンバーitem_infodoubleの配列の配列です:あなたはおそらく、このことは、文字列の配列です意味charの配列の配列は、行う必要があります。 strcpy関数は、文字列(配列char)のコピー用です。

market.item_info[0][0] = 200; //apple weight 
market.item_info[1][0] = 3; //apple price 
market.item_info[0][1] = 300; 
market.item_info[1][1] = 4; 

そして、あなたはmarketをスペルミスので、最後のエラーがある:

は、配列の各要素は、あなたがそれに割り当てることができることを意味変数、のようなものであることに注意してください。

これは初心者の方でも非常に明白で、の場合はというエラーメッセージが表示されます。

+0

私が今考え出した文字列の配列。 strcpyのエラーは私の愚かな間違いでした。私は文字列/ strcpyを使ってこのような些細な間違いが見られないほど長い間だけ作業してきました。このような小さなことにあなたの時間を無駄にして申し訳ありません。誤って私がここにコピーしたスペルミスを、投稿した直後に修正しました。 私たちはお互いを知りませんが、無礼にしようと思っています。誰もがプログラミングや物事に慣れているわけではありません。これらの私の誤りは純粋に彼らには盲目的なものであり、私は些細なことを認識しています。しかし、もう一度私を助けてくれてありがとう。 –

0

1 - あなたのitem_name [2]の宣言は正しいですが、間違った方法で使用しました。これは実際には論理エラーです。リンゴ、砂糖などのデータを保存するのに十分なスペースが必要です。文字列の最後の文字は '\ 0'です。実際にあなたは単に "リンゴ"または "砂糖"を保存するために1文字を宣言しています。

2 - strcpyは、文字列または文字配列を操作するためのものであり、この関数を数値変数とともに使用する権限はありません。

3最後の行にスペルミスがあります(OSに戻る前に)。

関連する問題