2010-12-21 11 views
1

この機能についての非常に奇妙な行動についての非常に奇妙な問題、NSStringの

void* getNSString(const NSString* str){ 

str = @"This is new test"; 
//NSString* str1 = @"so strange test"; 

return; 
} 

その後

NSLog(@"%@",getNSString(@"test")); 

コメント解除

NSString* str1 = @"so strange test"; 
場合、結果は

This is new test 

になります

何も返されないので、NULLにする必要があります。その文字列を印刷する理由は何ですか?

、結果は私がが返されないことを信じていません

so strange test 

答えて

10

になります。私はそれが未定義だと信じています。つまり、何かが返される可能性があります。

この場合、特定の場所のスタックに何があったのかが返されているように見えます。それはあなたが変更または作成した文字列の1つになりますが、これは幸運なことです(またはクラッシュがおそらくより良いので不幸です)。

あなたが返されることは何もしたくない場合は、変更する必要があります。

void* getNSString(const NSString* str){ 

へ:

void getNSString(const NSString* str){ 
+5

絶対に正しいです

を返すことができますが。このことについても警告が出るはずです。 –

+0

反映されると、この回答に追加したいことの1つは、**未定義**はまったく違う**重視**です。リターンを指定する関数は、常に何かを返します。構造によっては、時には 'nil'でもいいかもしれませんが、' nil'でも何かです。 –

0

ココア/ Objective Cのは、この方法を行う....私はまた、この種の問題に直面しています前に、例えば

-(NSObject*) someMethod() 
{ ... 

    NSString* result [email protected]"some value"; 
    // because too busy ,I just forgot write the return statement during dev :) 
} 

何も上記のコードのようなリターンはなかったが、アプリはまた、結果の値....非常に面白い....