Thread View: be.comp.programming
4 messages
4 total messages
Started by Aquila
Wed, 30 Oct 2002 13:11
Lege string geeft rommel
Author: Aquila
Date: Wed, 30 Oct 2002 13:11
Date: Wed, 30 Oct 2002 13:11
16 lines
1616 bytes
1616 bytes
In een eenvoudig programmaatje in C++ moest ik in een functie, met als returntype een string, een char returnen. Omdat gewoon een char returnen kennelijk niet lukt, probeerde ik return "" + c; // forceren die conversie door concatenatie Dat gaf echter telkens heel rare strings die uit die lege string leken te komen (bijv CREATE). Als ik echter met een tempvariabele werk: string tmp = ""; tmp += c; return tmp; krijg ik die rare strings niet. Mag je dan niet werken met die lege string om te returnen? Ik heb op een solaris getest met zowel een sun compiler als de gcc, het is dus geen specifieke bug (hoop ik). -- Aquila "May the source be with you"
Re: Lege string geeft rommel
Author: Toni Van Remortel
Date: Wed, 30 Oct 2002 13:18
Date: Wed, 30 Oct 2002 13:18
23 lines
1993 bytes
1993 bytes
Aquila wrote: > In een eenvoudig programmaatje in C++ moest ik in een functie, met als > returntype een string, een char returnen. Omdat gewoon een char > returnen kennelijk niet lukt, probeerde ik > return "" + c; // forceren die conversie door concatenatie > Dat gaf echter telkens heel rare strings die uit die lege string leken > te komen (bijv CREATE). Als ik echter met een tempvariabele werk: > string tmp = ""; > tmp += c; > return tmp; > krijg ik die rare strings niet. Mag je dan niet werken met die lege > string om te returnen? > Ik heb op een solaris getest met zowel een sun compiler als de gcc, > het is dus geen specifieke bug (hoop ik). Nooit ervan uitgaan dat een gedeclareerde variabele een standaard-waarde krijgt. Altijd zelf initialiseren. -- Groeten, ToniVR Researcher on LinEmb-project @ D-science lab. Anti-spam: E-mailadres is bij softhome.
Re: Lege string geeft rommel
Author: Roel Schroeven
Date: Wed, 30 Oct 2002 13:32
Date: Wed, 30 Oct 2002 13:32
42 lines
3120 bytes
3120 bytes
Aquila wrote:
> In een eenvoudig programmaatje in C++ moest ik in een functie, met als
> returntype een string, een char returnen. Omdat gewoon een char
> returnen kennelijk niet lukt, probeerde ik
> return "" + c; // forceren die conversie door concatenatie
> Dat gaf echter telkens heel rare strings die uit die lege string leken
> te komen (bijv CREATE). Als ik echter met een tempvariabele werk:
> string tmp = "";
> tmp += c;
> return tmp;
> krijg ik die rare strings niet. Mag je dan niet werken met die lege
> string om te returnen?
> Ik heb op een solaris getest met zowel een sun compiler als de gcc,
> het is dus geen specifieke bug (hoop ik).
Je probeert een char, c, te converteren naar een string door hem op te
tellen bij een lege string. Maar string en string is twee. "" is een
lege string, maar is eigenlijk een char pointer naar een stukje geheugen
waar \0 staat om de string af te sluiten. De string die het returntype
is van je functie daarentegen is de string uit de standard C++ library.
"" + c wordt ge�nterpreteerd als (erfenis van C) de string die begint c
plaatsen verder dan je lege string. Wat daar staat is totaal
ongedefinieerd, je hebt nog geluk dat je programma er niet op crasht.
Geen wonder dat er rare strings uit komen.
Wat je zou kunnen doen is die lege string omzetten naar een std::string:
return string("") + c;
en dan zou het wel goed werken. Het verwondert me ietwat dat std::string
geen constructor heeft om een char om te zetten in een string, dat zou
handiger zijn.
Best is, denk ik, zoals je zelf al zei je char op te tellen bij een lege
string, maar dan met een C++-style lege string ipv een C-style lege string:
return string() + c;
Je methode met de tempvariabele werkt wel omdat
string tmp = "";
de conversie van char* naar string voor je doet.
--
"Codito ergo sum"
Roel Schroeven
Re: Lege string geeft rommel
Author: Aquila
Date: Wed, 30 Oct 2002 14:01
Date: Wed, 30 Oct 2002 14:01
4 lines
1190 bytes
1190 bytes
Bedankt beiden voor de snelle en duidelijke reactie! -- Aquila "May the source be with you"
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads