0

バッファの先頭から 20 個、末尾から 20 個のスペースを削除するにはどうすればよいですか?

for20 から始まり、最後の合計で -20のループを実行できますが、各文字を 1 文字ずつ別のバッファにコピーするにはどうすればよいですか、または簡単なパディング コマンドはありますか?

これまでのすべてのヘルプに感謝しますが、約 20 文字、つまりダンプの MFI-40576-021 セクションが表示されるだけで、最初の 20 バイトがスキップされます。

ReadFile(h,buffer,0x224,&read,NULL);
buffer[read] = '\0'; 
char newbuff[1000];
memcpy(newbuff,buffer+20,sizeof(buffer)-40);
4

3 に答える 3

2

サイズs-40の新しいバッファを作成し、ソース+20から宛先までサイズsのmemcpyを実行します。

int read; //assumed
char buffer[0x224];
ReadFile(h,buffer,0x224,&read,NULL);

if(read-40 <=0) return;
char *newvar = (char*)malloc(read - 40 + 1);  // Fails with void to char error 
strncpy(newvar, buffer+20, read - 40); 
newvar[read-40] = '\0';
于 2012-07-20T20:20:02.890 に答える
0

元のバッファの変更が許容できる場合は、次の方法を使用するのが最も簡単な場合がありますmemmove

char* string = /* insert code here to obtain the string */;
size_t len = strlen(string) - 40;  // Number of bytes to move
memmove(string, string + 20, len); // Move string down by 20 bytes
memset(&string[len], 0, 40);       // Clear out the remaining buffer

この一般的な手順は、バッファ内のデータが文字列でない場合にも機能します。strlen元のバッファの長さを取得するために必要なコードで呼び出しを置き換える必要があります。

于 2012-07-20T22:46:26.950 に答える
0

strncpyを使用します。

char *string = // however you obtain the string
char *new = malloc(strlen(string) - 40 + 1);
strncpy(new, string + 20, strlen(string) - 40);
于 2012-07-20T20:25:41.827 に答える