-2

我有一个用 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 字符的最佳方法是什么?

4

3 回答 3

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
于 2014-09-26T22:32:04.023 回答
1

我的第一个想法是:计算从流中接收到的字符,然后一次将这些字节数写入文件。

如果这不可能,我们将采用不太聪明的方法:

int i = BUFFER_SIZE - 1;
while((i>=0) && (buffer[i--] == '\0'));
++i;

之后,i包含缓冲区的长度。

于 2014-09-26T22:39:53.477 回答
0

您可以利用 NULL 属性。只需复制没有 NULL 字符的此数据。像这样 len = strlen(buf); // 它将确保您只读取 total_char + 1 现在只将此缓冲区中的 len-1 char 复制到文件中。如果你愿意,你也可以准备新的缓冲区。

于 2014-09-26T22:33:33.307 回答