Показать первые символы без знака *

У меня есть следующий код (я удалил ненужные части):

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

И я хотел бы отображать только bufSize первые персонажи decrypted потому что на самом деле он отображает много бессмысленных символов!

1

Решение

Вы можете использовать "%.*s" спецификатор формата:

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

который инструктирует printf() написать первым bufSize персонажи из decrypted,

7

Другие решения

Вы можете ограничить длину с помощью спецификатора формата:

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

Для версии, использующей переменную bufSize:

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

Обратите внимание, что это заставляет длину именно так столько символов, дополненных пробелами справа, если это будет необходимо. Если вы хотите, чтобы более короткая строка была короче в выводе (не имеет значения в вашем случае, если строка, как указано, всегда длиннее, чем вы хотите вывести), вы можете использовать:

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

Если вам «разрешено» изменять decrypted строка. Вы можете просто добавить терминатор к нему:

decrypted[bufSize] = 0;

Так printf() будет печатать только содержимое буфера.

Если вам не разрешено добавлять собственный символ в decrypted буфер, вам нужно скопировать содержимое во временный буфер и использовать этот буфер в вашем printf():

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

Мне не нравится, что вы сказали, что указатель содержал глупость. Это не ерунда, это остаточная память. Существует большая вероятность, что вы ожидаете и хотите, чтобы эта область была установлена ​​на ноль. Попробуйте следующее, где calloc устанавливает malloc биты в ноль.

unsigned char* decrypted= (unsigned char *) calloc(500,sizeof(char));
bufSize = operations.RSADecrypt(newEncrypted, bufSize, key, decrypted);
printf("Test: %s", decrypted);
0
По вопросам рекламы [email protected]