Sida 1 av 1
C++ - deklarera pekare till strängkonstant [LÖST]
Postat: 29 jun 2008, 02:07
av Johnny Rosenberg
Håller fortfarande på att lära mig C++ från början och har ju upptäckt att det som fungerade alldeles utmärkt 1993 inte alls fungerar längre, då man lagt till saker i språket som måste vara med eller måste vara på ett speciellt sätt och så vidare.
Senast idag försökte jag kompilera lite idiotkod på simplaste nivå och fick visserligen inga fel, men väl en varning (programmet verkar fungera perfekt i alla fall):
Kod: Markera allt
varning: konvertering från strängkonstant till "char*" bör undvikas
Raden där detta felmeddelande hittades var av denna typ:
Så här kunde man göra enligt Stephen Pratas bok C++-programmering, femte upplagan från 2005, så uppenbarligen har man hittat på något sedan dess. Det står inget i boken heller om att det skulle finnas någon risk för varning. Sådant brukar alltid nämnas annars och han brukar då också säga vad man kan göra för att undvika varning eller felmeddelande, så detta verkar som sagt inte ha varit något värt att varna för år 2005 i alla fall.
Så kanske man ska ha några frågor på detta också, och de blir då:
Varför anser man det olämpligt att göra på detta sätt?
Vad anses lämpligt att göra istället?
Kompilator: g++ 4.2
Re: C++ - deklarera pekare till strängkonstant
Postat: 29 jun 2008, 02:41
av Smygis
För att det är C inte C++.
I C++ används std::string.
Re: C++ - deklarera pekare till strängkonstant
Postat: 29 jun 2008, 12:03
av Johnny Rosenberg
Smygis skrev:För att det är C inte C++.
I C++ används std::string.
Aj då, vilken blunder av herr Prata (själv är jag givetvis helt oskyldig…), att ta med sådant i en bok som heter ”C++-programmering”… Visserligen är detta i början av boken, sidan 368 (av nästan 1200) om någon undrar, men han har redan innan den sidan gått igenom string… Nåja, i de olika exempel han ger använder han hela tiden lite olika sätt att göra saker på, kanske för att visa på alternativen. Detta kanske var mer accepterat 2005 än det är idag, eller så glömde de ändra just detta från tidigare upplagor.
Re: C++ - deklarera pekare till strängkonstant
Postat: 29 jun 2008, 15:24
av DrMegahertz
Strängen "Tjoflöjt" kommer lagras som en konstant sträng i minnet, därför krävs det att du använder en pekare av typen
const char.
Bör alltså fungera bra!

Re: C++ - deklarera pekare till strängkonstant
Postat: 29 jun 2008, 17:09
av Johnny Rosenberg
DrMegahertz skrev:Strängen "Tjoflöjt" kommer lagras som en konstant sträng i minnet, därför krävs det att du använder en pekare av typen
const char.
Bör alltså fungera bra!

Visst ja, Stephen Prata pratar ju hela tiden om användandet av
const i sådana sammanhang, kul att han själv glömde bort den detaljen just där då.
Enligt min kompilator (g++ 4.2 tror jag att det är) KRÄVS inte
const char. Programmet fungerar utmärkt ändå, men man får en varning när man kompilerar. En varning som ändå inte hindrar att kompileringen fullföljs.
Re: C++ - deklarera pekare till strängkonstant
Postat: 29 jun 2008, 17:43
av DrMegahertz
Helt riktigt, eftersom det är fullt möjligt att peka en char* till en const char* genom lite casting, implicit eller explicit. Det riktiga felet uppstår när du försöker skriva till strängen, prova t.ex. att byta ut en valfri byte i strängen, resultatet borde vara en segfault.
Hur som helst så markerar jag tråden som löst!
Re: C++ - deklarera pekare till strängkonstant
Postat: 30 jun 2008, 18:31
av Johnny Rosenberg
DrMegahertz skrev:Hur som helst så markerar jag tråden som löst!
Det gör du rätt i!
