Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c-char数组不是';不要打印每一个值_C_Arrays_Char_Int - Fatal编程技术网

c-char数组不是';不要打印每一个值

c-char数组不是';不要打印每一个值,c,arrays,char,int,C,Arrays,Char,Int,我目前正在创建一个加密/解密应用程序作为实践,为此,我一直在尝试使用snprintf将一个整数转换为一个字符数组。但是,例如,如果我有一个4位的整数,它只添加前3位。以下是我目前的代码: int encrypt(int num, bool type) { char buffer[sizeof(num)]; snprintf(buffer, sizeof(buffer), "%d", num); printf(buffer); return 0; } 任何帮助都会

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

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

任何帮助都会很棒

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

您可以假设
int
的大小,并将
缓冲区定义为:

char buffer[12]; /* large enough for -2147483648 */
或者,您可以精确且便携地执行此操作:

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

char缓冲区[snprintf(NULL,0,“%d”,num)+1]
请阅读
sizeof
运算符所做的操作。snprintf只会将sizeof(buffer)-1个字符写入您的缓冲区,因为它需要为空终止符留出空间。我怀疑OP在这里需要sizeof(num),因为该值与num的值无关。如果这是他真正想要的,他应该使用
sizeof int
@FredK:我不同意:使用
sizeof(num)
是可取的,因为它可以工作,而不管实际的整数类型是什么,以后可能会更改为
long
甚至
long
。当类型在一个地方而不是在其他地方更改时,复制类型是导致错误的常见原因。