2012-07-20 42 views
0

如何從緩衝區的開頭刪除20個空格,最後刪除20個空格?刪除緩衝區前後的20個空格C

我可以運行一個for循環開始在20和20在最後的總數,但我怎麼複製每個字符char到另一個緩衝區或有一個簡單的填充命令?

感謝迄今爲止所有的幫助,但只是顯示了大約20個字符,即來自轉儲的MFI-40576-021部分現在跳過了20個垃圾字節。

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

回答

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'; 
+2

鑄造'malloc'的返回值是不明智的。 – 2012-07-20 20:20:43

+0

我在考慮C++ .. H2CO3有什麼問題呢? – ryanbwork 2012-07-20 20:23:28

+0

@ryanbwork這是沒有理由省略終止的NUL字符,交換dest和src等。 – 2012-07-20 20:24:07

0

使用strncpy()函數:

char *string = // however you obtain the string 
char *new = malloc(strlen(string) - 40 + 1); 
strncpy(new, string + 20, strlen(string) - 40); 
+0

在'strncpy'調用中,我想你應該爲第二個參數寫'string + 20'。 – bta 2012-07-20 22:37:15

+0

@bta我當然了,謝謝。 – 2012-07-21 04:38:11

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調用來獲得原始緩衝區的長度。