我有以下代码(我去掉了无用的部分):
unsigned char* decrypted= (unsigned char *) malloc(500);
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);
而且我只想显示的bufSize
第一个字符,decrypted
因为实际上它显示了很多无意义的字符!
我有以下代码(我去掉了无用的部分):
unsigned char* decrypted= (unsigned char *) malloc(500);
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);
而且我只想显示的bufSize
第一个字符,decrypted
因为实际上它显示了很多无意义的字符!
您可以使用"%.*s"
格式说明符:
printf("Test: %.*s", bufSize, decrypted);
它指示printf()
从 中写入第一个bufSize
字符decrypted
。
您可以使用格式说明符限制长度:
printf ("Test: %-20.20s", decrypted);
对于使用变量的版本bufSize
:
printf ("Test: %-*.*s", bufSize, bufSize, decrypted);
请注意,这会强制将长度精确到那么多字符,如果需要,在右侧用空格填充。如果您希望输出中较短的字符串更短(如果字符串如指示的那样总是比您想要的输出长,则在您的情况下不相关),您可以使用:
printf ("Test: %.*s", bufSize, decrypted);
如果您被“允许”修改decrypted
字符串。您可以简单地为其添加一个终止符:
decrypted[bufSize] = 0;
所以printf()
只会打印缓冲区内容。
如果不允许将自定义字符添加到decrypted
缓冲区,则需要将内容复制到临时缓冲区并在您的printf()
:
unsigned char* tmp = (unsigned char *) malloc(bufSize + 1);
strncpy(tmp, decrypted, bufSize);
tmp[bufSize] = 0;
我不喜欢你说的指针包含废话。不是废话,是残存的记忆。您很有可能期望并希望将此区域设置为零。尝试以下操作,其中calloc
将malloc
位设置为零。
unsigned char* decrypted= (unsigned char *) calloc(500,sizeof(char));
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);