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()を書き込むように指示します。bufSizedecrypted

于 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()、バッファの内容のみを出力します。

バッファにカスタム char を追加することが許可されていない場合はdecrypted、内容を一時バッファにコピーして、そのバッファを次のように使用する必要がありますprintf()

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

ポインターにナンセンスが含まれているとあなたが言ったのは好きではありません。それはナンセンスではなく、残りの記憶です。この領域をゼロに設定することを期待し、希望する可能性は十分にあります。ビットをゼロにcalloc設定する次のことを試してください。malloc

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 に答える