1

我有以下代码(我去掉了无用的部分):

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

而且我只想显示的bufSize第一个字符,decrypted因为实际上它显示了很多无意义的字符!

4

4 回答 4

7

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

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

它指示printf()从 中写入第一个bufSize字符decrypted

于 2013-01-18T09:36:41.900 回答
3

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

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

对于使用变量的版本bufSize

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

请注意,这会强制将长度精确到那么多字符,如果需要,在右侧用空格填充。如果您希望输出中较短的字符串更短(如果字符串如指示的那样总是比您想要的输出长,则在您的情况下不相关),您可以使用:

printf ("Test: %.*s", bufSize, decrypted);
于 2013-01-18T09:35:35.800 回答
1

如果您被“允许”修改decrypted字符串。您可以简单地为其添加一个终止符:

decrypted[bufSize] = 0;

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

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

unsigned char* tmp = (unsigned char *) malloc(bufSize + 1);
strncpy(tmp, decrypted, bufSize);
tmp[bufSize] = 0;
于 2013-01-18T09:35:22.000 回答
0

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

unsigned char* decrypted= (unsigned char *) calloc(500,sizeof(char));
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);
于 2013-01-18T09:41:36.810 回答