Nefunguje mi strcpy() – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Nefunguje mi strcpy() – C / C++ – Fórum – Programujte.comNefunguje mi strcpy() – C / C++ – Fórum – Programujte.com

 

Bionik0
Duch
9. 2. 2018   #1
-
0
-

Dobrý den,

Rozhodl jsem se, že se pokusím naučit C++ a tak jsem otevřel knihu Mistrovství v C++. Je tam následující příklad:


// delete.cpp -- pouziti operatoru delete
#include<iostream>
#include<cstring>


using namespace std;
char * getname(); // funkcni prototyp


int main() {

char *name; // vytvari ukazatel, ale nealokuje pamet
name = getname(); // prirazuje adresu retezce do name
cout << name << " na adrese " << (int *)name << "\n";
delete[] name; //uvolnil pamet


name = getname(); // nove pouziti uvolnene pameti
cout << name << " na adrese " << (int *)name << "\n";
delete[] name; // opet uvolnil pamet


getchar();
return 0;
}


char * getname() // vraci ukazatel novemu retezci
{
char temp[80]; // docasna pamet
cout << "Zadejte prijmeni: ";
cin >> temp;
char * pn = new char[strlen(temp) + 1];
strcpy(pn, temp);
return pn;
}
 

Ovšem nechce mi už v několika příkladech fungovat strcpy, tak jsem použil strcpy_s ovšem to mi zde nefunguje.

Pokud použiji strcpy tak to napíše tuto chybu:

Error C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. 

Pokud použiji strcpy_s tak to napíše tyto chyby:



Error (active) E0304 no instance of overloaded function "strcpy_s" matches the argument list


Error C2660 'strcpy_s': function does not take 2 arguments 

Snažil jsem se na toto téma přečíst nějaké články a použil strncpy (pn, temp, 100);  

což vypíše opět chybu:


Error C4996 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.

Asi se ptám hloupě ale jsem začátečník a samouk, možná přijdou i další začátečnické otázky..... Moc děkuji za rady. B.




Nahlásit jako SPAM
IP: 46.135.105.–
Bionik0
Duch
9. 2. 2018   #2
-
0
-

TAK SE MI PODAŘILO PROGRAM SPUSTIT TAKHLE ALE V name MI TO VYHAZUJE V DATOVÉM TYPU NESMYSLNÉ ZNAKY..... NAPADÁ VÁS ČÍM TO MŮŽE BÝT? DĚKUJI. B.

Připojen obrázek.


// delete.cpp -- pouziti operatoru delete
#include<iostream>
#include<cstring>
using namespace std;
char * getname(void); // funkcni prototyp
int main() {

char * name; // vytvari ukazatel, ale nealokuje pamet
name = getname(); // prirazuje adresu retezce do name
cout << name << " na adrese " << (int *)name << "\n";
delete[] name; //uvolnil pamet
name = getname(); // nove pouziti uvolnene pameti
cout << name << " na adrese " << (int *)name << "\n";
delete[] name; // opet uvolnil pamet
getchar();
getchar();
return 0;
}
char * getname() // vraci ukazatel novemu retezci
{
char temp[80]; // docasna pamet
cout << "Zadejte prijmeni: ";
cin >> temp;
char * pn = new char[strlen(temp) + 1];
strcpy_s(temp, pn);
return pn;
}
 

Nahlásit jako SPAM
IP: 46.135.105.–
Radek Chalupa
~ Redaktor
+1
Super člen
9. 2. 2018   #3
-
0
-

#2 Bionik
pokud se dobře dívám tak máš prohozené parametry. fce strcpy_s má jako 1. parametr cílovou adresu (cheš-li řetězec) a 2. parametr zdrojový.

Jinak pokud jako cílový parametr bude dynamicky alokovaný, nemůžeš používat tu šablonovou variantu, ale musíš uvést délku cílového bufferu, tj. nějak takhle:

char* str = (char*)malloc(delka);

strcpy_s(str, delka, zdroj);

Radek Chalupa

http://www.radekchalupa.cz

Nahlásit jako SPAM
IP: 89.177.51.–
Bionik0
Duch
9. 2. 2018   #4
-
0
-

#3 Radek Chalupa
Dobrý den pane Chalupo,

     Děkuji za rady. Zatím toho vím o dynamicky alokované paměti příliš málo..... Musím to víc dostat do sebe. Bohužel v knize, když narazím na problém, velmi těžko se překonává bez porady se zkušenějším. Začal jsem se učit programovací jazyk z důvodu, že programuji obráběcí stroje ale jejich řídící systémy jsou napsány v programovacích jazycích a už delší dobu jsem měl nutkání se naučit programovací jazyk a pochopit, jak se řídící systémy pro obráběcí stroje a průmyslové roboty vyvíjí..... Tak snad se mi to jednou podaří. Děkuji.

S pozdravem, B.

Nahlásit jako SPAM
IP: 46.135.27.–
KIIV
~ Moderátor
+43
God of flame
9. 2. 2018   #5
-
0
-

#4 Bionik
Holt mas uz stare vydani. A veskere funkce kopirujici neco nekam bez kontroly, ze se to tam opravdu vejde, jsou proste nebezpecne a postupne se likvidujou.

Kazdopadne se to da vypnout. Mas to primo v popisu chyby. Bud to hodis nekam do vlastnosti projektu. V nastaveni projektu je sekce C/C++ > Preprocessor > Preprocessor Definitions   tak jen sem doplnit dalsi hodnotu _CRT_SECURE_NO_WARNINGS

A kdyby neco, tak na  http://cppshell.com/, coz je online kompilator na bazi gcc, s tim problemy nejsou.

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 30 hostů

Podobná vlákna

Winapy - strcpy — založil Vollf

Strcpy a AnsiString — založil geroj

Nebezpečné voláné strcpy — založil Dusty007

Nefunguje IF? — založil RemykCzech

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý