How to format a string

On 01/07/2013 at 10:34, xxxxxxxx wrote:

User Information:
Cinema 4D Version:   R13-R14 
Platform:   Windows  ;   
Language(s) :     C++  ;

---------
Writing C++ plugins for C4D, how do you format a string?
I want to do this:

"The file %1 exists, do you want to overwrite?", dialogFileName.GetFileString()

But haven't found a way to do it in C++.

On 01/07/2013 at 10:48, xxxxxxxx wrote:

Take a look at MessageDialog() - there are several overrides. But to do this you will need to use a resource string (good practice anyway). Of course, it's only good for short messages, but that's often all that's needed.

On 01/07/2013 at 10:52, xxxxxxxx wrote:

c4d offers string format functionality for loading strings from the resource with geloadstring.

On 01/07/2013 at 10:54, xxxxxxxx wrote:

There are a couple of ways to do this.

Here is the first one.

  
  String = "The file " + dialogFileName.GetFileString() + " exists, do you want to overwrite?";  

Another way is to use something like  snprintf() but it is not a C4D way to do this 🙂

  
    
    
      char buffer [128];
      int cx = snprintf ( buffer, 128, "The file %1 exists, do you want to overwrite?", str );
  
  //TODO:  Add better way to do this...  

On 01/07/2013 at 11:33, xxxxxxxx wrote:

Originally posted by xxxxxxxx

c4d offers string format functionality for loading strings from the resource with geloadstring.

Bingo!
That's the one for me, thanks.

Originally posted by xxxxxxxx

Take a look at MessageDialog() - there are several overrides. But to do this you will need to use a resource string (good practice anyway).

Yes, I always use resource strings. 
Great tip! Just using the ID - fantastic.

On 02/07/2013 at 11:53, xxxxxxxx wrote:

Here's a quick-n-dirty "printf()" type function - just make sure that you don't overflow the buffer :)...

  
//-------------------------------------------------------------  
// GePrintF()  
//-------------------------------------------------------------  
void GePrintF(const CHAR *format,...)  
{  
 va_list arp;  
 CHAR buf[1024];  
  
 va_start(arp,format);  
 vsprintf(buf,format,arp);  
 GePrint(buf);  
 va_end(arp);  
}