Zdravím,
začal jsem se učit C++ a došel jsem až ke strukturám a tady jsem se zasekl na chybě, takže budu rád za radu.
Mám strukturu:
struct employees {
char name[20];
int age;
};
employees person;
když vložím věk, tak je všchno v pořádku
person.age = 18;
když ale vložím jméno, hlásí to chybu
person.name = "Robert";
v čem je chyba? Co dělám špatně?
Fórum › C / C++
Struct - chyba při v kládání
To není problém struktury, ale způsobu, jakým se v C/C++ používají řetězce.
Krátká odpověď: použij třídu string, pak to bude fungovat snadno a intuitivně.
Dlouhá odpověď: char name[20] je pole bajtů velikosti 20. Prosté = použít nelze. Musíš těch 20 bajtů prostě překopírovat (funkce memcpy nebo strcpy).
To Apik : V případě, že používáš strcpy() a snažíš se uložit větší počet znaků, než se do pole vejde, program spadne s chybou. Pokud používáš strncpy(), můžeš udat maximální počet znaků, které se uloží do pole. V Případě, že vstupní řetězec bude mít více znaků, než pole, do kterého ukládáš, uloží se pouze počet znaků, který jsi zadal jako 3. parametr ve fci strncpy().
Jiné řešení je použít string z STL jak jsem psal.
#include <string>
using namespace std;
...
string name;
name = "Pepa"; // bez problemu
Důvod je ten, že low-level práce s pamětí je dost náchylná na chyby a například na ty bezpečnostní problémy. A v tomto případě se tomu dá vyhnout použitím toho stringu. Ale asi je pravda, že někdy se to člověk naučit musí, jinak potom nebude umět napsat si v C++ třídy, které ho toho ušetří :)
To Bald3rr : ono program skonci chybou jen pokud zasahuje nekam kam nema.. muze ale sam sebe docela prepsat... je to jeden z docela hodne pouzivanych zpusobu jak se nekam nahakovat... at uz v linuxu nebo ve win ...
samo funguje jen u sluzeb ... pro ziskani vetsich prav (resp cizich prav)
> KIIV - jak to může ovlivnit bezpečnost?
V extremnom pripade moze utocnik skutocnost, ze nekontrolujete pocet znakov vyuzit na tzv. buffer overflow attack, pri ktorom moze dojst az k spusteniu kodu utocnika.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Chyba při kompilaci — založil Ykita
Chyba při přihlášení — založil Mike.Jt
Chyba při stahování — založil Janina
Chyba při stahování — založil Reky
Chyba při nahrávání do DB — založil Marek
Moderátoři diskuze