char array записывать в файл

У меня есть структура, называемая Product, в которой у меня есть переменная, называемая prodname:

char prodname[30];

Экземпляр структуры называется продуктом

Я написал метод проверки, является ли имя, введенное пользователем, уникальным или нет. В этом методе я передаю значение, введенное пользователем, методу checkprodname (char n [30])

В основном методе

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**

Я уже использовал ту же логику для продида, который работал; однако при использовании строки я понятия не имею, как добраться до фактического присвоения значения в фактическую структуру, так как я получаю эту ошибку.

Любая помощь будет оценена по достоинству.

0
nl ja de

2 ответы

Если вы находитесь на C ++, подумайте о замене массивов char на std :: string. Не то, чтобы он делал все, что сильно отличалось, но std :: строки обычно проще в использовании. (ИМХО)

1
добавлено
Задумчивость. Если вы храните структуры продукта в std :: map , где std :: string является prodname (string-ified), вы можете легко проверить наличие отображаемого элемента.
добавлено автор Wes Miller, источник

Вы не можете назначать массивы в C, используя эту нотацию. Для символьных строк используйте strcpy() ; для других массивов используйте memmove() или memcpy() . Во всех случаях убедитесь, что в целевой памяти достаточно места для хранения того, что находится в источнике.

Обычно я бы хотел написать:

strcpy(product.prodname, prodName);

Учитывая предупреждение о компиляции, которое вы получаете, кажется, вам нужно использовать:

strcpy(product.prodname, *prodName);

Учитывая обсуждение в комментариях ниже, кажется, что первая альтернатива была верна в конце концов, но я думаю, что это означает, что ошибка компиляции относится к другой строке, а не к присваиванию, которое было показано.

0
добавлено
ОК; то я не понимаю, откуда исходит компилятор. Без * это то, что я впервые ожидал (это обычный способ его записи), но я предположил, что ошибка присваивания применяется к заданию, которое вы указали. AFAICS, учитывая ваш комментарий, что * prodname не работает, ошибка не может применяться к этой строке, но у нас недостаточно программ, чтобы быть уверенным.
добавлено автор Jonathan Leffler, источник
с * prodname не работает. Кажется, что это работает без *.
добавлено автор Jurgen Cuschieri, источник
btw Я в C не в c ++, Wes Miller
добавлено автор Jurgen Cuschieri, источник