2013-01-09 107 views
0

我有一个叫做产品中,我有一个变量,名为prodname的结构:字符数组写入文件

char prodname[30]; 

该结构的实例被称为产品

我写检查的方法由用户输入的名称是唯一的或不是。在该方法中,我通过由用户输入的方法调用checkprodname(烧焦N [30])

在main方法

if(checkprodname(prodName) == 0) 
    { 
     gotoxy(21,13); 
     printf("The Product Name that you have entered already exists."); 
     getch(); 
     addproduct(); 
     return 0; 
    } 

然后在此之后我有这行代码的值:

product.prodname = prodName; 

为了将temp变量prodName中的值赋给实际的结构体。当然,我会让他们继续将所有这些保存到文件中。但直到现在我得到一个错误,因为这是我得到的错误:

incompatible types when assigning to type char[30] from type char** 

我已经使用相同的逻辑prodid工作;然而,当使用字符串时,我不知道如何到达实际分配值的实际结构,因为我得到该错误。

任何帮助,将不胜感激。

回答

0

您不能使用该表示法在C中分配数组。对于字符串,请使用strcpy();对于其他阵列,请使用memmove()memcpy()。在所有情况下,确保目标中有足够的空间来存储源代码中的内容。

通常情况下,我会想到写:

strcpy(product.prodname, prodName); 

鉴于你得到编译警告,看来你需要使用:

strcpy(product.prodname, *prodName); 

由于在下面的意见的讨论,看起来第一个选择是正确的,但我认为这意味着编译错误适用于不同的行,而不是显示的分配。

+0

与* prodname不起作用。它似乎没有*工作。 –

+0

好的;那么我不明白编译器错误来自哪里。没有'*'是我第一次预期的(这是写它的通常方式),但我认为赋值错误适用于你所显示的任务。 AFAICS,考虑到你的评论,“* prodname”不起作用,错误不能适用于该行,但我们没有足够的程序来确定。 –

+0

btw我在C不是在C++中,Wes Miller –

1

如果您使用C++,请考虑用std :: string替换char数组。并不是说它会造成很大的差异,但std :: strings通常更易于使用。 (恕我直言)

+0

事后才想到。如果将产品结构存储在std :: map 其中std :: string为prodname(string-ified)的地方,则可以轻松检查是否存在映射成员。 –