我有以下代码(我删除了无用的部分):
unsigned char* decrypted= (unsigned char *) malloc(500);
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);
我想只显示bufSize
的{{1}}首字符,因为它实际上显示了很多无意义的字符!
答案 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)
我不喜欢你说的指针包含废话。它不是废话,它的残余记忆。您期望很有可能并希望将此区域设置为零。请尝试以下操作:calloc
将malloc
位设置为零。
unsigned char* decrypted= (unsigned char *) calloc(500,sizeof(char));
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);