文本文件中的\0字符

 

最近读一个文件的某一行后,进行域切分的时候,最一个字段为空。 明明有字符的,于是缩小范围进行debug。

因为底层是getline写的,所以跟踪了一下,发现getline的读取到\n结束作为一行的。

如下read到的641, 但strlen 返回的为21,所以感觉是读取到的行中包含\0字符。

 

通过hexdump -c /tmp/history.dat.utf8 发现的确有\0。

也可以vim打开文本文件,set list 可以看到^@一样的一个字符就是\0了。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    FILE * fp;
    char * line = NULL;
    size_t len = 0;
    ssize_t read;
    fp = fopen("/tmp/history.dat.utf8", "r");
    if (fp == NULL)
        exit(EXIT_FAILURE);
    while ((read = getline(&line, &len, fp)) != -1)
    {
        printf("Retrieved line of length %zu :\n", read);
        printf("%s\t%ld\n", line, len);
        int len = strlen(line);
        printf("len %ld \t %s\nat@ %caaa\n", len, line + len + 1, line[len]);
    }
    if (line)
        free(line);
    exit(EXIT_SUCCESS);
}

 

---恢复内容结束---

posted @ 2019-01-30 11:52  westfly  阅读(1925)  评论(0编辑  收藏  举报