2011-01-20 33 views
0

私はintを返すC関数を作成しようとしていますが、プロセス内で変数として渡されたchar *が代入されます。私がしようとしています何の基本的な例は次のとおりです。main.cのでCでは、関数に渡されたchar *にはどのようにテキストが設定されますか?

int myMethod(int input, char* output, int outMaxLen) { 
    int outValue = input * 5; 
    if (out < 10) strcat(output, "A small number"); 
    else if (out < 20) strcat(output, "A medium number"); 
    else strcat(output, "A large number"); 
} 

実行
char* myMethodOutput; 
int myMethodInt = myMethod(2, myMethodOutput, 15); 
printf("%d %s", myMethodInt, myMethodOutput); 

、画面上の整数表示されますが、テキストにはありません。

変数outMaxLenは、char *パラメータが出力文字列を格納するのに十分な大きさであることを確認するためのものです。

strcat()と同様に、私はstrcpy()とstrncpy()を試してみました。 strcat()はコンソールにテキストを表示せず、strcpy()とstrncpy()はメッセージEXC_BAD_ACCESSでデバッガを起動します。

私はこれをWindows APIでstrcpy_s関数を使ってうまく管理しましたが、今はUNIXボックスで試しています。私はおそらく何か非常に基本的なものを逃している!

+0

このコードでは、名前を修正する必要があります。外に何がありますか?あなたはoutMaxLenを意味しますか? –

+1

あなたは何も返されないようです。 –

+0

セグメンテーションフォールトは発生しませんか? –

答えて

6

ポインタに最初にメモリを割り当てる必要があります。それ以外の場合は、メモリ内のランダムな領域に書き込んでいます。例えば:

char *myMethodOutput = malloc(256); 
/* ... etc ... */ 


free(myMethodOutput); 
+1

または、文字列を静的に宣言できます。 – voodoogiant

+0

ああ!もちろん!それは非常に基本的なものでした!どうもありがとう! – BWHazel

1
char* myMethodOutput; 

myMethodOutput = malloc(sizeof(char) * 200); //200 is example 

myMethod()また、解放することを忘れないでください「バッファの長さ」などのパラメータを命名すると、確かに、十分な長さのバッファを作成しないタイプvoid

1

である必要があります。

バッファにメモリを割り当てない。少なくともサンプルコードではありません。

0

myMethodOutputのメモリをmalloc()などで割り当てる必要があります。初期化されていないポインタの場所に書き込むことは良い考えではありません。

関連する問題