String::FindFirst()
-
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/03/2007 at 13:20, xxxxxxxx wrote:
User Information:
Cinema 4D Version: 9.603
Platform: Windows ;
Language(s) : C++ ;---------
Hi Guys,
I am unable to get the FindFirst member function of the String class to operate correctly. The following code should work, but doesn't:LONG *charPos = NULL; String name("Cube Whatever"); if(name.FindFirst(" ", charPos, 0)) { if(!charPos) { GePrint("Exiting"); return TRUE; } name[*charPos] = '_'; }
The charPos pointer will ALWAYS return NULL! The really confusing thing is that the console will always print "Exiting" meaning that the FindFirst() is finding the " " in the name string. So the question is: Why is the LONG *Pos parameter not returning a correct pointer? As always any help on this is always much appreciated.
Josh -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/03/2007 at 14:28, xxxxxxxx wrote:
You have only created a NULL pointer. You have to allocate a LONG variable and pass the pointer to FindFirst. This should work:
LONG charPos = 0; //create a variable on the stack String name("Cube Whatever"); if(name.FindFirst(" ", &charPos;, 0)) //pass the address (pointer) of charPos { name[charPos] = '_'; }
Alternatively you can also allocate a LONG on the heap with gNew, just make sure to de-allocate it with gDelete. Note always use Cinemas own allocation methods to ensure maximum platform compatibility.
cheers,
Matthias -
THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED
On 28/03/2007 at 14:44, xxxxxxxx wrote:
Thanks for the quick reply. I assumed that the pointer would be filled by the FindFirst() which is why I initially set it to NULL. But this makes sense, thanks once again.
Josh