kender du til den funktion som kan returnere den... selvom funktionen nu virker.... Når du mener "free"... mener du så "delete chartekst"... men hvordan kan jeg gører det efter jeg har returnere chartekst??
åbenbart kan jeg jo bare lave returntype const og lade de variabler som jeg skal bruge funktionen til const.... men på hvilken måde kan det påvirke min kode i det lange løb?
arne_v >> Du skriver at man ikke MÅ lave en konstruktion som :
int length = stringtekst.length(); char chartekst[length];
og så returnerer chartekst pointeren.
Sandheden er vel at man ikke kan lave et char array med en varianle længde ved hjælp af [] operatoren, og at man vil være nødt til at bruge new eller malloc, altså f.eks. :
int length = stringtekst.length(); char *chartekst = new char[length];
Det du skal være opmærksom på er at du ikke må modificere det indhold som pointeren fra stoc() peger på. Så længe du kun bruger den til at læse skulle det være ok. Grunden til at c_str() returnerer en const pointer er at pointeren peger direkte ned i std::string'ens interne lager
jeg har også brugt din først løsning arne, altså: char *stoc( string stringtekst ) { int length = stringtekst.length(), i; char chartekst[ length ]; for( i=0; i<length; i++ ) chartekst[ i ] = stringtekst[ i ];
chartekst[ i+1 ] = '\0';
return chartekst; }
hvilket virkede perfekt... men så jeg anbefalet af hsloth char *stoc(std::string stringtekst) { return stringtekst.c_str();}
arne> Jeg synes det er god programmeringsskik at angive størrelsen, det gør vedligeholdelsen af koden enklere. (hvis du fx skulle ønske at skifte til unicode på et tidspunkt)
arne> Der er nok ingen der skifter til unicode udelukkende v.b.a søg og erstat, men hvorfor gøre det vanskeligere for sig selv end højst nødvendigt. Det er lettere at overse 1 end sizeof(char) !
arne_v> Du skriver noget med at de fleste oversættere vil gøre det rigtige hvis du kommer til at skrive delete i forhold til delete[]. De oversættere jeg har kendskab til vil *ikke* gøre det rigtige i dette tilfælde, idet kun delete[] garanterer at destructors bliver kaldt for alle allokerede elementer. delete vil kalde destructor for det første element.
Enten bruger du nogle meget specielle compilere eller så overså du lige i forbi farten at det er char's vi new'er og delete'r (og den har ingen destructor !).
arne_v >> Doh! Du har som sædvanlig fuldstændig ret. Men *hvis* nu char havde haft en d'tor, så havde jeg haft ret :-).
Derudover synes jeg det er god skik at bruge delete[] sammen med new[]. Eksempelvis hvis man har en eller anden typedef som i øjeblikket er en char*, men som om fem år bliver MyOwnChar*, hvor MyOwnChar er en eller anden klasse.
Jo, men flere af svarene kunne vel godt bruges alligevel - eller ?
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.