C 代码删除文件中的 ^M/Windows 最后一个字符?

标签 c linux file format

我想问一下您是否知道可以删除尾部 ^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 

谢谢 迷你

最佳答案

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

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

当然,您不必为了摆脱 \r 而这样做。你可以坚持你已经拥有的东西,但是把每一 block 都拿出来:

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

这会找到一个 \r 并将其替换为 \0,然后将 p 前进一个字符。 \0 截断 line,然后附加 p,删除 \0 并将整个字符串缩短为每次迭代一个,直到找不到更多的 \r

关于C 代码删除文件中的 ^M/Windows 最后一个字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18946338/

相关文章:

php - 通过 PHP 从站点重复检索数据

c - 指向结构中指针的指针?

在 C 中创建排序链表

php - 通过命令行将日期传递给 PHP

python - 递归扫描文件并删除python中的空目录

Java - 锁定文件以进行独占访问

void 指针可以安全地指向另一个指针吗?

python - 创建 'generic' 类继承外部模块类的最佳方法

linux - ActiveMQ 基本 JAAS 身份验证配置

c++ - 调试客户机器上生成的核心文件