1

我想问一下您是否知道可以删除拖尾^M / Windows最后一个字符的代码?

 2147 int convert_dos_to_unix( char *fileread ) {
 2148   int i ;
 2149   FILE *fp ;
 2150   char line[PATH_MAX];
 2151     fp = fopen( fileread ,  "r");
 2152     while( ( !feof(fp) )   ) {
 2153        if ( !feof(fp)) {
 2154           fgets(line, PATH_MAX, fp); printf ( "%s" , line);
 2155           i++;
 2156         }
 2157       }
 2158     fclose( fp );
 2159     return i ;
 2160 }
 2161 

谢谢迷你

4

2 回答 2

1

Windows 使用两个字符序列\r\n(回车 + 换行,又名换行)。

请注意,您的代码实际上并不是逐行读取,而是逐块读取。如果您想逐行工作,您可以查看getline()(参见man 3 getline参考资料),这是 glibc 提供的 GNU 扩展。它不是标准的 C,但 glibc 是标准的 linux C 库。

当然,您不必这样做来摆脱\r's。你可以坚持你所拥有的,但拿走每一块:

char *p = strchr(line, '\r');
while (p) {
    *p = '\0';
    strcat(line, ++p);
    p = strchr(p, '\r');
}

这会找到 an\r并将其替换为\0,然后前进p一个字符。\0truncates line,然后附加p\0在每次迭代中删除整个字符串并将整个字符串缩短一个,直到没有更多\r的 s 可以找到。

于 2013-09-22T17:05:09.617 回答
0

DOS 文件有一个回车换行符,\r\n它的 CRLF 字符由 . 表示^M。您所要做的就是从行尾删除这个字符您就完成了!

编辑:添加了\n角色。谢谢金凤花。

于 2013-09-22T17:04:54.553 回答