在缓冲区C之前和之后删除20个空格

时间:2012-07-20 20:11:38

标签: c buffer cell padding

如何从缓冲区的开头删除20个空格,在结尾处删除20个空格?

我可以在20和-20开始运行for循环,但是如何将每个char按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);

3 个答案:

答案 0 :(得分:2)

创建一个大小为s-40的新缓冲区,从源+20到目标的memcpy执行大小为s。

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

答案 1 :(得分:0)

使用strncpy:

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

答案 2 :(得分: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调用。