乱数を生成するためにrand関数を使用しました。char buffer[10]
この番号をまたはに収集したいchar *ptr
main()
{
char *ptr;
int a;
srand(time(NULL));
a = rand();
}
の値をバッファにコピーするか、それをポイントしたいのchar *ptr
ですが、これで私を助けてください
乱数を生成するためにrand関数を使用しました。char buffer[10]
この番号をまたはに収集したいchar *ptr
main()
{
char *ptr;
int a;
srand(time(NULL));
a = rand();
}
の値をバッファにコピーするか、それをポイントしたいのchar *ptr
ですが、これで私を助けてください
参考までに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
は失敗することができないからです。
使用できます
char x[10];
sprintf(x, "%d", integer_number);
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);
を使用する方が安全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);
}
コンパイラが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);
}