文本文件中的\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); }
---恢复内容结束---