2009-08-21 8 views
1

Aussi stupide que cela puisse paraître, j'essaie d'écrire une fonction simple dans objective-c qui renvoie une chaîne et l'affiche, le code suivant fonctionne presque mais je ne peux pas obtenir printf pour accepter les fonctions valeur de retour ...fonction qui renvoie une chaîne

NSString* getXMLElementFromString(); 

int main(int argc, char *argv[]) 
{ 
    printf(getXMLElementFromString()); 
    return NSApplicationMain(argc, (const char **) argv); 
} 

NSString* getXMLElementFromString() { 
    NSString* returnValue; 
    returnValue = @"Hello!"; 
    return returnValue; 
} 

Répondre

1

Je ne sais pas si printf peut gérer un NSString. Essayez somethign comme:

printf ("%s\n", [getXMLElementFromString()cString]); 
+0

Impressionnant, a parfaitement fonctionné! Merci mon pote. –

+0

Je continuerais à argumenter en utilisant 'NSLog()' sur 'printf()' si vous allez faire un travail de Cocoa sérieux. – jbrennan

+2

Préférez '-UTF8String' à' -cString' - vérifiez la documentation de NSString. –

2

Vous devriez utiliser NSLog() qui prend une chaîne (ou une chaîne de format) en tant que paramètre.

Vous pouvez utiliser soit

NSLog(getXMLElementFromString()); 

ou

NSLog(@"The string: %@", getXMLElementFromString()); 

Lorsque le jeton %@ spécifie un objet Objective-C (dans ce cas, une NSString). NSLog() fonctionne essentiellement de la même manière que printf() lorsqu'il s'agit de chaînes de format, mais il accepte également le jeton d'objet.

+4

La première forme devrait presque toujours être évitée - si un attaquant peut spécifier une chaîne de format, vous pouvez vous faire baiser très rapidement. –

5

NSString* n'est pas équivalent à une chaîne C traditionnelle, ce à quoi s'attendait printf. Pour utiliser printf de telle sorte que vous aurez besoin de tirer parti d'une API NSString pour obtenir une chaîne terminée par null sur elle:

printf("%s", [getXMLElementFromString() UTF8String]); 
+1

Merci pour votre aide, merveilleux. –

Questions connexes