将整数转换为字符串

时间:2012-11-26 09:15:36

标签: c

我使用rand函数生成一个随机数。我想将此号码收集到char buffer[10]char *ptr

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

我想将a中的值复制到缓冲区或将其指向char *ptr,请在此帮助我

5 个答案:

答案 0 :(得分: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实现没有{{1 }}。请注意,Microsoft的snprintf不是直接替代品:当它截断输出时,它不会告诉您要写入多少数据。

在这种情况下,您可以使用值_snprintf计算出值可能有多少位数,从而确定缓冲区需要多大的数字。 10在Linux上是不够的,其中RAND_MAXRAND_MAX,因此你需要11个字节用于以nul结尾的字符串。

顺便说一下,我忽略了2147483647表示除截断之外的错误的可能性,它与返回值-1有关。那是因为snprintf不能失败。

答案 1 :(得分:1)

您可以使用

char x[10];
sprintf(x, "%d", integer_number);

答案 2 :(得分: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);

答案 3 :(得分: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);
}

答案 4 :(得分: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);
}