strings???

Previous topic - Next topic

Heiko

was ist der unterschied zwischen   

Code (glbasic) Select
_Str.c_str()

und

Code (glbasic) Select
_Str.GetStrData()

?

nutze es bei einer funktion als parameterübergabe, und es spukt bei beidem keine fehler aus, muss ja trotzdem ein unterschied sein.


minor

Mahlzeit,

die Prototypen der Operationen lauten:
Code (glbasic) Select

const char* DGStr::c_str()const;
char* DGStr::GetStrData(unsigned int size=256);


Das sollte deine Frage beantworten.

Gruß,
minor

Kitty Hello

Der c_str liefert einen const char*, der GetStrData liefert einen char* auf ein Feld mit einer Mindestlänge von "size" bytes.
Den Unterschied zwischen char* und const char* findest Du hier:
http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.5

Heiko

#3
naja mir gings um die decl zu gbas geschichte.
weil dort überall
Code (glbasic) Select
_Str.GetStrData() eingesetzt wurde, ich aber vorher überall
Code (glbasic) Select
_Str.c_str() genutzt habe!

Spielt das in diesem Zusammenhang überhaupt eine Rolle?
Wenn da strings übergeben werden, was wäre sinnvoller zu nutzen?

beispiel:

Code (glbasic) Select
//! xSetEffectMatrixArray
// \param ent -
// \param name$ -
// \param bmat -
// \param num -
FUNCTION Xo_SetEffectMatrixArray: ent,name$,bmat,num
INLINE
name_Str.Alloc(512);
xSetEffectMatrixArray(ent,name_Str.GetStrData(),bmat,num);
ENDINLINE
ENDFUNCTION


was bedeutet da noch: 
Code (glbasic) Select
_Str.Alloc(512);

hab ich ja vorher nie verwendet.

Kitty Hello

Na, ich weiß ja bei den GlitzWrappern nicht, ob hier ein char* oder ein const char* gebraucht wird. Also gehe ich auf Nummer Sicher und übergebe einen char*, den ich vorher mit 512 alloziiere.

Schranz0r

bei Blitz sind normal immer Str.c_str()...

bin ich immer gut mit gefahren ;)
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Heiko

also mach ich am besten beim DECLARE_ALIAS ein const char*  rein, und in der funktion immer Str.c_str().

und müsste also so passen?

Schranz0r

Normal ja !
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Ausser z.B. bei Kernel32.dll / GetTempPath usw.
Da scheppert's gewaltig, wenn man nicht GetStrData() verwendet.

Schranz0r

Da schon...

Also man kann immer GetStrData() verwenden?
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Mei, ist halt das Problem, dass er bei kürzeren String dann erstmal 512 bytes neu allozieert und dann übergibt. Sicherer ist's auf alle Fälle.
OH! Ganz vergessen! Nach dem GetStrData() muss man nochmal ein "myStr.CalculateLen()" machen, weil er dann sucht wo der '\0' ist und intern die Länge einträgt. Sonst geht's bei GetTempPath() auch net. Ich aktualisier mal den Wrapper.

Heiko

wo muss das "myStr.CalculateLen()" genau hin, poste mal ein beispiel, weil ich hab schon gewrappt und angepasst, nochmal wollt ich das nicht tun, so füge ich das von hand ein.

Kitty Hello

Nach dem Funktionsafruf. Du musst warten, bis der Wrapper alles automatisch richtig macht. Mit Hand hat das keinen Sinn. Besonder  nicht, wenn man sich net auskennt.

Heiko

kann ich nicht trotzdem einfach im declare : const char*  nehmen und in der funktion : Str.c_str()   ?

wenns damit keine probleme geben würde, würd ich das nämlich so nehmen, weil das mit dem converter im allg. noch net so funktioniert, und so würde ich das der einfachheit einfach austauschen.

oder könnte es da probleme geben?

und wenn ja, welcher art, weil dann könnte ich ja die betreffenden funktionen seperat aus einer convertierten decl übernehmen, und den rest beim alten lassen.

oder ich schick dir, wenn fertig einfach mal mein projekt per mail und du schaust mal rein, wär das okay?

Kitty Hello

Quote from: Kitty Hello on 2008-Jul-31
... keinen Sinn. Besonder  nicht, wenn man sich net auskennt.

Mach's mit dem Wrapper. Geht's ist's OK, geht's nicht, sag mir warum nicht. Ich hab keine Lust auf ein Gespräch, wo die andere Seite nur Bahnhof versteht. Wenn Du das Gespräch willst, dann lern C++, lern was der Unterschied von char* und const char* ist, dann können wir reden.