我有一个填充了0的大型char数组。我从套接字读取传入的文件并将其内容放在缓冲区中。我无法用其中的所有' \ 0进行缓冲区写入,因此我分配了一个具有正确大小的新缓冲区并进行写入。 我用这种方法做到了:
int i = 0;
while(buf[i] != '\0'){
i++;
}
char new[i];
while(i){
new[i] = buf[i];
i--;
}
new[0] = buf[0];
虽然这种方法有效,但它看起来并不是最聪明或最优雅的方式。从char数组中删除所有尾随NULL字符的最佳方法是什么?
答案 0 :(得分:2)
我想更简单的方法是:
size_t len = strlen(buf); // will calculate number of non-0 symbols before first 0
char * newBuf = (char *)malloc(len); // allocate memory for new array, don't forget to free it later
memcpy(newBuf, buf, len); // copy data from old buf to new one
答案 1 :(得分:1)
我的第一个想法是:计算从流中收到的字符,然后立即将该字节数写入您的文件。
如果那是不可能的,我们采用不那么聪明的方法:
int i = BUFFER_SIZE - 1;
while((i>=0) && (buffer[i--] == '\0'));
++i;
之后,i
包含缓冲区的长度。
答案 2 :(得分:0)
您可以利用NULL属性。 只需复制没有NULL字符的数据。像这样 len = strlen(buf); //它将确保您只读取total_char + 1 现在只将len-1 char从此缓冲区复制到该文件。如果你愿意,你也可以准备新的缓冲区。