0

動的に割り当てられた変数は SecureZeroMemory でトリミングされ、ReadFile は短い 5 文字の文字列と残りの正方形の束を入力します。問題は、文字列の末尾にあるジャンク文字です。

「モーター췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍」

ReadFile の lpNumberOfBytesRead パラメータは、文字列が 10 文字であることを示しています。これは Unicode であるためですか?

これらの末尾のジャンク文字を削除する方法を教えてもらえますか? それらをクリアするZeroMemoryのような機能はありますか?

TCHAR *sIncoming;
sIncoming = (TCHAR *) malloc(sizeof(TCHAR) * 4096 +  sizeof(TCHAR));
RtlZeroMemory(sIncoming ,sizeof(sIncoming));

// (a string array with no characters in it: "")

bSuccess = ReadFile(hPipe,sIncoming ,BUFSIZE*sizeof(TCHAR),&dwBytesRead,NULL);

// Now the string array has the incoming string plus extra characters in it: 
//    "motor췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍췍"

free(sIncoming);

ありがとう!

4

2 に答える 2

0

sizeof(sIncoming)は、ポインターのサイズです。sizeof(TCHAR)* 4097が必要です。または、callocを使用してください。

于 2011-03-03T17:06:11.603 に答える
0

ゼロ終了 (もちろん呼び出しが成功したReadFile後):

sIncoming[dwBytesRead/sizeof(TCHAR)] = 0;

注意: バッファ制限を守ってください。

あなたのコードにつなぎ合わせて完成させてください:

#define BUFSIZE 4096
TCHAR *sIncoming;
sIncoming = (TCHAR *) malloc(sizeof(TCHAR)*BUFSIZE+sizeof(TCHAR));
bSuccess = ReadFile(hPipe,sIncoming ,BUFSIZE*sizeof(TCHAR),&dwBytesRead,NULL);
if(bSuccess)
  sIncoming[dwBytesRead/sizeof(TCHAR)] = 0;
free(sIncoming);

編集:RtlZeroMemory厳密には必要ないため、呼び出しを削除しました。受信した C 文字列をゼロで終了するようにしてください。

于 2011-03-03T17:08:41.903 に答える