user-0 提问: 请教: 如何去掉每行结尾的换行符? C .

回复:
user: user-1
content: 引用 9 楼 UIUI 的回复://修改版.  To 赵4老师: 程序不能编译程序 VS2019 程序还没看懂.收藏再消化. To 六道佩恩: 查看网上的方法,有不少是用一个字符一个字符读的方法. 我试试后,再用你列举的两个方法.    /* 标准文档模板 */  #include "Stdio.h" #include "Conio.h" #include <sys\stat.h>  #include <time.h> #include "ctype.h" #include "stdlib.h" #include "string.h"   char* NopEnter(char* str)  // 此处代码是抄的,  但是比较 好懂. { 	char* p; 	if ((p = strchr(str, '\n')) != NULL) 		* p = '\0'; 	return str; }  int main() { 	FILE* fpSS; 	FILE* fpDS; 	int err; 	char* str; 	char* temp; 	system("color 17");  	str = (char*)malloc(sizeof(char)*101); 	temp = (char*)malloc(sizeof(char)*101); 	err = fopen_s(&fpSS, "filess.txt", "r"); 	err = fopen_s(&fpDS, "fileds.txt", "w"); 	if (fpDS == NULL) 	{ 		puts("-fileds.txt- 文件打开错误!!\n"); 		exit(-1); 	} 	if (fpSS == NULL) 	{ 		puts("-filess.Txt- 文件打开错误\n"); 		fputs("源文件打开错误!", fpDS); 		exit(-1); 	}   	while (fgets(str, 100, fpSS) != NULL) 	{ 		puts(str);    		str = NopEnter(str);  //去掉回车 		fputs(str, fpDS);   	} 	fclose(fpSS); 	fclose(fpDS); 	return(0); }   这个方法也挺好的，跟fwrite的那个方法应该差不多，fgets应该就是以换行为结尾获取的一行字符，那么换行应该就在结尾。

user: user-2
content: 仅供参考：#include <stdio.h> FILE *f; int c1,c2; int main(int argc,char *argv[]) {     if (argc!=2) {         printf("Usage: CR2CRLF filename\n");         return 1;     }     f=fopen(argv[1],"rb+");     if (NULL==f) {         printf("Can not open file [%s]!\n",argv[1]);         return 2;     }     while (1) {         c1=fgetc(f);         if (EOF==c1) break;         if ('\r'==c1) {             c2=fgetc(f);             if (EOF==c2) {                 fseek(f,-1L,SEEK_CUR);                 fputc('\n',f);                 break;             }             if ('\n'!=c2) {                 fseek(f,-2L,SEEK_CUR);                 fputc('\n',f);                 fseek(f,1,SEEK_CUR);             }         }     }     fclose(f);     return 0; }

user: user-3
content: str=(char*)malloc(sizeof(char));   temp=(char*)malloc(sizeof(char));   你这里分配一个字节空间，然后下列代码中一次读一行最长101字节。 你不怕越界访问内存？？你这段代码写的问题很大。   while (  fgets(str,100+1,fpSS) != NULL )      {         puts(str);    //在这里如何用temp 变换一下,再写入文件?         fputs(str,fpDS);       }

user: user-0
content: //修改版.  To 赵4老师: 程序不能编译程序 VS2019 程序还没看懂.收藏再消化. To 六道佩恩: 查看网上的方法,有不少是用一个字符一个字符读的方法. 我试试后,再用你列举的两个方法.    /* 标准文档模板 */  #include "Stdio.h" #include "Conio.h" #include <sys\stat.h>  #include <time.h> #include "ctype.h" #include "stdlib.h" #include "string.h"   char* NopEnter(char* str)  // 此处代码是抄的,  但是比较 好懂. { 	char* p; 	if ((p = strchr(str, '\n')) != NULL) 		* p = '\0'; 	return str; }  int main() { 	FILE* fpSS; 	FILE* fpDS; 	int err; 	char* str; 	char* temp; 	system("color 17");  	str = (char*)malloc(sizeof(char)*101); 	temp = (char*)malloc(sizeof(char)*101); 	err = fopen_s(&fpSS, "filess.txt", "r"); 	err = fopen_s(&fpDS, "fileds.txt", "w"); 	if (fpDS == NULL) 	{ 		puts("-fileds.txt- 文件打开错误!!\n"); 		exit(-1); 	} 	if (fpSS == NULL) 	{ 		puts("-filess.Txt- 文件打开错误\n"); 		fputs("源文件打开错误!", fpDS); 		exit(-1); 	}   	while (fgets(str, 100, fpSS) != NULL) 	{ 		puts(str);    		str = NopEnter(str);  //去掉回车 		fputs(str, fpDS);   	} 	fclose(fpSS); 	fclose(fpDS); 	return(0); }

user: user-4
content: 引用 3 楼 user-5的回复:  str=(char*)malloc(sizeof(char));   temp=(char*)malloc(sizeof(char));你好像完全不知道这2句代码是干嘛的? 空间分配啊                ，

user: user-5
content: str=(char*)malloc(sizeof(char));   temp=(char*)malloc(sizeof(char));你好像完全不知道这2句代码是干嘛的?

user: user-0
content: 引用 1 楼 이 몽 결的回复:去掉\n？。。。。。。，，，， 我也不知道是n还是r

user: user-4
content: 去掉\n？。。。。。。，，，，

user: user-0
content: 引用 3 楼 user-5的回复:  str=(char*)malloc(sizeof(char));   temp=(char*)malloc(sizeof(char));你好像完全不知道这2句代码是干嘛的? 知道，却用错了。应该是*100

user: user-1
content: 你可以不用fputs， 方法一：改用fputc，循环单个字符输出到文件，遇到换行不输出 方法二：用fwrite，检测字符串的长度，然后写这个长度-1个字符（换行在最后的话）