0

乱数を生成するためにrand関数を使用しました。char buffer[10]この番号をまたはに収集したいchar *ptr

main()
{
    char *ptr;
    int a;
    srand(time(NULL));
    a = rand();
}

の値をバッファにコピーするか、それをポイントしたいのchar *ptrですが、これで私を助けてください

4

5 に答える 5

3

参考までにsnprintf、バッファの大きさが事前にわからない場合の使用方法は次のとおりです。

size_t len = snprintf(NULL, 0, "%d", a) + 1;
char *ptr = malloc(len);
if (!ptr) {
    // memory allocation failed, you must decide how to handle the error
} else {
    snprintf(ptr, len, "%d", a);

    ... // some time later

    free(ptr);
}

ただし、コードは古いスタイルで記述されているため(main関数の開始時に戻り型がなく、すべての変数が宣言されている)、C実装にがない可能性がありますsnprintf。Microsoftは直接の代替ではないことに注意してください_snprintf。出力を切り捨てても、書き込むデータの量はわかりません。

この場合、値RAND_MAXを使用して、値の桁数、つまりバッファーの大きさを計算できます。Linuxでは10では不十分です。ここで、RAND_MAXはです2147483647。したがって、ヌル文字で終了する文字列には11バイトが必要です。

ところで、私はsnprintf切り捨て以外のエラーを示す可能性を無視しました。これは、戻り値-1で行われます。それ%dは失敗することができないからです。

于 2012-11-26T09:38:57.970 に答える
1

使用できます

char x[10];
sprintf(x, "%d", integer_number);
于 2012-11-26T09:17:44.903 に答える
0
char ptr[10];
sprintf(ptr,"%d",a);

使用したい場合char *ptr

char *ptr = malloc(10*sizeof(char));
sprintf(ptr,"%d",a);

// And If you want to free allocated space for ptr some where:
free(ptr);
于 2012-11-26T09:18:33.793 に答える
0

を使用する方が安全snprintf()です。

int answer = 42;
char buf[32];
snprintf(buf, sizeof(buf), "%d", answer);
printf("The answer is: %s\n", buf);

動的に割り当てられたバッファを使用する場合:

const size_t size = 32;
char *buf = malloc(size);
if (buf != NULL) {
    snprintf(buf, size, "%d", answer);
}
于 2012-11-26T09:26:38.633 に答える
0

コンパイラがGCCの場合:

#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>

main()
{
    char *ptr;
    int a;
    srand(time(NULL));
    a = rand();
    asprintf(&ptr, "%d", a);
    printf("%s\n", ptr);
    //DO SOMETHING
    free(ptr);
}
于 2012-11-26T09:41:13.470 に答える