C++ - deklarera pekare till strängkonstant [LÖST]

Här diskuteras programmering och utveckling
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

C++ - deklarera pekare till strängkonstant [LÖST]

Inlägg 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:

Kod: Markera allt

char *p="Tjoflöjt";
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
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
Smygis
Inlägg: 849
Blev medlem: 21 jun 2006, 18:41
OS: Ubuntu
Utgåva: 24.04 Noble Numbat LTS
Ort: Kramfors

Re: C++ - deklarera pekare till strängkonstant

Inlägg av Smygis »

För att det är C inte C++.
I C++ används std::string.
A Foolish Consistency is the Hobgoblin of Little Minds.Beware: In C++, your friends can see your privates!
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: C++ - deklarera pekare till strängkonstant

Inlägg 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.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
DrMegahertz
Inlägg: 296
Blev medlem: 06 maj 2006, 14:37
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS
Ort: Södra Dalarna

Re: C++ - deklarera pekare till strängkonstant

Inlägg 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.

Kod: Markera allt

const char* message = "Tjoflöjt";
Bör alltså fungera bra! :)
BildAre you shpongled? Bild
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: C++ - deklarera pekare till strängkonstant

Inlägg 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.

Kod: Markera allt

const char* message = "Tjoflöjt";
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.
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Användarvisningsbild
DrMegahertz
Inlägg: 296
Blev medlem: 06 maj 2006, 14:37
OS: Ubuntu
Utgåva: 14.04 Trusty Tahr LTS
Ort: Södra Dalarna

Re: C++ - deklarera pekare till strängkonstant

Inlägg 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!
BildAre you shpongled? Bild
Användarvisningsbild
Johnny Rosenberg
Inlägg: 1256
Blev medlem: 23 jun 2007, 16:18
OS: Ubuntu
Utgåva: 22.10 Kinetic Kudu
Kontakt:

Re: C++ - deklarera pekare till strängkonstant

Inlägg av Johnny Rosenberg »

DrMegahertz skrev:Hur som helst så markerar jag tråden som löst!
Det gör du rätt i! :D
Vänliga hälsningar

Johnny Rosenberg
ジョニー・ローゼンバーグ

IEEE 1541 - binära prefix
ISO 8601 - datum och tid
Skriv svar

Återgå till "Programmering och webbdesign"