删除缓冲区C前后的20个空格

删除缓冲区C前后的20个空格,c,buffer,cell,padding,C,Buffer,Cell,Padding,如何从缓冲区的开头删除20个空格,在结尾删除20个空格 我可以运行一个for循环,从20开始,最后总计-20,但是如何将每个字符逐个复制到另一个缓冲区,或者是否有一个简单的padding命令 感谢到目前为止的所有帮助,现在可以正常工作了,但只显示了大约20个字符,即转储中的MFI-40576-021部分。现在,它在开始时跳过了20个垃圾字节 ReadFile(h,buffer,0x224,&read,NULL); buffer[read] = '\0'; char newbuff[10

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

我可以运行一个
for
循环,从20开始,最后总计-20,但是如何将每个字符逐个复制到另一个缓冲区,或者是否有一个简单的padding命令

感谢到目前为止的所有帮助,现在可以正常工作了,但只显示了大约20个字符,即转储中的MFI-40576-021部分。现在,它在开始时跳过了20个垃圾字节

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

创建大小为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';
int读取//假定
字符缓冲区[0x224];
ReadFile(h,缓冲区,0x224,&read,NULL);
如果(读取-40使用strncpy:

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

如果可以更改原始缓冲区,则可以使用
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
调用替换为获取原始缓冲区长度所需的任何代码。

不需要强制转换
malloc
的返回值。@ryanbwork这不是省略终止NUL字符的借口,当你被问及“C”的问题时,你为什么会在C++中思考?是的,我猜他是不是要把它打印成字符串。我会编辑答案,包括一个0。@ H2CO3,因为我用C++编程谋生,并且把MalCtrs写成是在<代码> StrncPy < /Cudio>调用中的一个习惯,我认为你应该写第二个参数“代码>字符串+ 20 < /代码>。