c - char数组不打印每个值

时间:2016-02-29 23:43:27

标签: c arrays char int

我目前正在创建一个加密/解密应用程序作为实践,为此,我一直在尝试使用snprintf将整数转换为char数组,但是,例如,如果我有一个4位数的整数,它只会添加第一个3.到目前为止,这是我的代码:

int encrypt(int num, bool type)
{
    char buffer[sizeof(num)];
    snprintf(buffer, sizeof(buffer), "%d", num);
    printf(buffer);
    return 0;
}

任何帮助都会很棒!

1 个答案:

答案 0 :(得分:1)

缓冲区的大小应足以容纳转化的数字加上最终的'\0'和潜在的减号。 sizeof(num)int变量的字节数,很可能是4,不足以转换大于999的数字,但snprintf的写入数不会超过缓冲区的大小,包括最终的'\0',因此只有前3位数。

您可以对int的大小进行假设,并将buffer定义为:

char buffer[12]; /* large enough for -2147483648 */

或者你可以准确而便携地做到:

char buffer[sizeof(num) * CHAR_BIT / 3 + 3];