У меня есть следующий код (я удалил ненужные части):
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);