• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nieprawidłowa zamiana "char*" na "char"

0 głosów
481 wizyt
pytanie zadane 2 marca 2019 w C i C++ przez mrKaczorrro13 Użytkownik (560 p.)

Witam.

Mam problem z zadaniem 2 z rodzialu 8 z ksiazki "Jezyk C++ szkola programowania". Wyskakuje mi caly czas ten sam blad w definicji funkcji "funkcja". W tej konkretnej linijce: Coben.marka[ArrSize]=name;

invalid conversion from 'char*' to 'char'.

Probowalem juz to zamienic na wiele roznych sposobow i nic. Zrobilem to samo zadanie ze string i wszystko dziala rewelacyjnie jednak tresc zadnia wyraznie wskazuje na uzycie typu char. Czy moglby mi ktos wskazac jak rozwiazac ten problem? Z gory dziekuje bardzo!

#include <iostream>
#include <string.h>
#include <stdio.h>
#include <cstring>
using namespace std;
const int ArrSize=80;
struct batonik
{
    char marka[ArrSize];
    double waga;
    int kalorie;
};

batonik funkcja(batonik &Coben, char *name="Millennium Munch", double weight=2.85, int kcl=350);
void show(const batonik &Coben);
int main()
{

    batonik Mars;
    funkcja(Mars);
    show(Mars);
    funkcja(Mars,"Jowisz",34.6,233);
    show(Mars);
    return 0;
}
batonik funkcja(batonik &Coben, char *name, double weight, int kcl)
{
    Coben.marka[ArrSize]=name;
    Coben.waga=weight;
    Coben.kalorie=kcl;
    return Coben;
}
void show(const batonik &Coben)
{
    cout<<Coben.marka[ArrSize]<<endl;
    cout<<Coben.waga<<endl;
    cout<<Coben.kalorie<<endl;
}

 

2 odpowiedzi

+1 głos
odpowiedź 2 marca 2019 przez mokrowski Mędrzec (158,580 p.)
wybrane 3 marca 2019 przez mrKaczorrro13
 
Najlepsza

Zamiast:

Coben.marka[ArrSize]=name;

Powinieneś kopiować ten ciąg znaków. To co robisz swoim kodem to próba przypisania do jednego elementu tablicy char (czyli pojedynczego znaku), napisu składającego się ze znaków kilku. W ten sposób można to zrobić poprawnie:

std::strncpy(Coben.marka, name, ArrSize);

Dodatkowo poprawne jest:

batonik funkcja(batonik &Coben, const char *name="Millennium Munch", double weight=2.85, int kcl=350);

oraz:

batonik funkcja(batonik &Coben, const char *name, double weight, int kcl)

.. i następny błąd. Powinno być tak:

cout<<Coben.marka<<endl;

W pierwotnym kodzie, wyprowadził byś na konsolę 1 znak "za tablicą". Raczej tego nie chcesz bo to jest zachowanie niezdefiniowane.

0 głosów
odpowiedź 2 marca 2019 przez Marcin Siniarski Gaduła (4,420 p.)

char* oznacza tablicę znaków, inaczej ciąg znaków (string).
Dzięki [] możesz wyciągnąć pojedynczy znak/liczbę/itp z tablicy.
Więc co tu próbujesz zrobić to przypisać tablicę znaków do pojedynczego znaku.

komentarz 3 marca 2019 przez mrKaczorrro13 Użytkownik (560 p.)
Dziekuje

Podobne pytania

0 głosów
2 odpowiedzi 203 wizyt
pytanie zadane 17 lutego 2020 w C i C++ przez Magda98 Nowicjusz (120 p.)
0 głosów
1 odpowiedź 665 wizyt
0 głosów
1 odpowiedź 631 wizyt
pytanie zadane 26 stycznia 2020 w C i C++ przez Oskardes Użytkownik (600 p.)

93,427 zapytań

142,421 odpowiedzi

322,649 komentarzy

62,787 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...