2009-08-21 18 views
1

Dumm wie es klingen mag, versuche ich eine einfache Funktion in objective-c, die eine Zeichenfolge zurückgibt und zeigt es an, der folgende Code funktioniert fast, aber ich kann printf nicht erhalten, um die Funktionen zu akzeptieren Rückgabewert ...Funktion, die eine Zeichenfolge zurückgibt

NSString* getXMLElementFromString(); 

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

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

Antwort

1

Ich weiß nicht, dass printf mit einem NSString umgehen kann. Versuchen somethign wie:

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

Awesome, funktionierte perfekt! Danke Kumpel. –

+0

Ich würde immer noch argumentieren mit 'NSLog()' über 'printf()', wenn Sie jede ernsthafte Cocoa-Arbeit tun. – jbrennan

+2

Lieber '-UTF8String' über '-cString '- überprüfen Sie die NSString-Dokumentation. –

2

Sie stattdessen NSLog(), die einen String verwendet werden soll (oder einen Format-String) als Parameter.

könnten Sie verwenden entweder

NSLog(getXMLElementFromString()); 

oder

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

Wo der %@ Token (in diesem Fall ein NSString) ein Objective-C Objekt angibt. NSLog() funktioniert im Wesentlichen genauso wie printf(), wenn es um Formatstrings geht, akzeptiert es nur das Objekt-Token.

+4

Die erste Form sollte fast immer vermieden werden - wenn ein Angreifer je eine Formatzeichenfolge angeben kann, kann man sich echt schnell überdrehen. –

5

NSString* entspricht nicht einer traditionellen C-Zeichenfolge, die printf erwarten würde. Zur Nutzung printf in einer solchen Art und Weise müssen Sie eine NSString API nutzen, um eine nullterminierten String aus ihm heraus zu bekommen:

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

Danke für die Hilfe, wunderbar. –

Verwandte Themen