2009-08-21 7 views
1

愚かなことがあるかもしれませんが、文字列を返して表示する単純な関数をobjective-cで記述しようとしていますが、次のコードはほぼ動作しますが、printfに関数戻り値...文字列を返す関数

NSString* getXMLElementFromString(); 

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

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

答えて

1

printfがNSStringを処理できることはわかりません。 somethignなどを試してみてください。

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

素晴らしい、完璧に機能しました!ありがとう。 –

+0

もしあなたが深刻なCocoaの仕事をしているのなら、 'print()'に 'NSLog()'を使って議論します。 – jbrennan

+2

'-cString'より' -UTF8String'を優先します - NSStringのドキュメントを確認してください。 –

2

代わりにパラメータとして文字列(またはフォーマット文字列)をとるNSLog()を使用する必要があります。

%@トークンは(この場合はNSStringの中)のObjective-Cのオブジェクトを指定する場合はあなたは

NSLog(getXMLElementFromString()); 

または

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

のいずれかを使用することができます。 NSLog()は、フォーマット文字列に関してはprintf()と本質的に同じように機能し、オブジェクトトークンも受け入れます。

+4

最初の形式はほとんどの場合避けなければなりません。攻撃者がフォーマット文字列を指定することができれば、本当に素早く失敗することができます。 –

5

NSString*は、従来のC文字列と同等ではありません。これは、printfが期待する文字列です。このような方法でprintfを使用するには、NSString APIを利用してヌルで終了する文字列を取得する必要があります。

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

素晴らしい、助けてくれてありがとう。 –

関連する問題