我试图制作一个结构,其中包含(在此示例中)要在数组中购买的商品的名称,以及矩阵中的价格和我应该购买的重量。这只是我尝试做的一个简单的例子。 我使用strcpy声明这个值只是因为我这样学习它,如果它是最好的方法,我不会这样做。
#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上搜索了答案和解决方案,但我尝试的所有内容都引起了其他错误,甚至是同样的错误。对于我一般的编程新手,我不知道这些错误意味着什么。
提前谢谢
答案 0 :(得分:0)
成员item_name
是一个两个字符的数组,它不是一个字符串数组,它只是一个字符串(只能容纳一个字符,请记住所有字符串都有一个特殊的终结者角色)。您可能应该将此数组作为char
数组,这意味着它是一个字符串数组:
char item_name[2][64]; // Two strings, each can hold 63 characters
成员item_info
是 double
的数组数组。 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
。
如果您只是读取错误消息,所有这一切对于初学者来说都是非常明显的。
答案 1 :(得分:0)
三个问题:
你的结构没有字符串数组。它有一个字符数组。您需要为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]);
答案 2 :(得分:0)
1 - 您对item_name [2]的声明是正确的,但您使用的方式错误。这实际上是逻辑错误。你需要足够的空间来保存你的数据,例如:apple,sugar和......字符串的最后一个字符是'\ 0'。事实上,你只是声明一个字符用于保存“苹果”或“糖”。
2 - strcpy
用于操作字符串或字符数组,因此您无权将此函数用于数值变量。
3你在最后一行拼写错误(在返回操作系统之前)。