文本文件中的字符

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

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

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

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

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

#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 :
", read);
        printf("%s	%ld
", line, len);
        int len = strlen(line);
        printf("len %ld 	 %s
at@ %caaa
", len, line + len + 1, line[len]);
    }
    if (line)
        free(line);
    exit(EXIT_SUCCESS);
}

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

原文地址:https://www.cnblogs.com/westfly/p/10337496.html