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