显示unsigned char的第一个字符*

时间:2013-01-18 09:33:11

标签: c++ printf unsigned-char

我有以下代码(我删除了无用的部分):

unsigned char* decrypted= (unsigned char *) malloc(500);
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);

我想只显示bufSize的{​​{1}}首字符,因为它实际上显示了很多无意义的字符!

4 个答案:

答案 0 :(得分:7)

您可以使用"%.*s"格式说明符:

printf("Test: %.*s", bufSize, decrypted);

指示printf()撰写bufSize中的第一个decrypted字符。

答案 1 :(得分:3)

您可以使用格式说明符限制长度:

printf ("Test: %-20.20s", decrypted);

对于使用变量bufSize的版本:

printf ("Test: %-*.*s", bufSize, bufSize, decrypted);

请注意,这会强制完全的长度为多个字符,如果需要,用右边的空格填充。如果你想要一个较短的字符串在输出中更短(如果字符串是指示的,总是比你想要的输出更长),你可以使用:

printf ("Test: %.*s", bufSize, decrypted);

答案 2 :(得分:1)

如果您“被允许”修改decrypted字符串。您只需添加一个终结符:

decrypted[bufSize] = 0;

所以printf()只打印缓冲区内容。

如果不允许向decrypted缓冲区添加自定义字符,则需要将内容复制到临时缓冲区并在printf()中使用该缓冲区:

unsigned char* tmp = (unsigned char *) malloc(bufSize + 1);
strncpy(tmp, decrypted, bufSize);
tmp[bufSize] = 0;

答案 3 :(得分:0)

我不喜欢你说的指针包含废话。它不是废话,它的残余记忆。您期望很有可能并希望将此区域设置为零。请尝试以下操作:callocmalloc位设置为零。

unsigned char* decrypted= (unsigned char *) calloc(500,sizeof(char));
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);