0

intを返す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");
}

main.c:

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

実行すると、整数が画面に表示されますが、テキストは表示されません。

outMaxLen変数は、char *パラメーターをチェックして、出力文字列を収容するのに十分な大きさであることを確認することを目的としています。

strcat()と同様に、私はstrcpy()とstrncpy()を試しましたが、まったく役に立ちませんでした。strcat()はコンソールにテキストを表示せず、strcpy()とstrncpy()はメッセージEXC_BAD_ACCESSでデバッガーを呼び出します。

strcpy_s関数を使用してWindowsAPIでこれを正常に管理できましたが、現在UNIXボックスで試しています。私はおそらく非常に基本的なものが欠けています!

4

4 に答える 4

6

最初にポインタにメモリを割り当てる必要があります。そうしないと、メモリ内のランダムな領域に書き込むだけです。例えば:

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


free(myMethodOutput);
于 2011-01-20T18:23:16.890 に答える
1
char* myMethodOutput;

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

解放することを忘れないでください、またmyMethod()タイプでなければなりませんvoid

于 2011-01-20T18:23:30.773 に答える
1

パラメータに「バッファの長さ」という名前を付けても、実際には十分な長さのバッファは作成されません。

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

于 2011-01-20T18:23:52.247 に答える
0

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

于 2011-01-20T18:26:06.220 に答える