如何在换行符的准确索引位置赋值空字符'\0'?解析相关代码
如何将空值'\0'赋值到换行符所在的准确索引位置
核心语句的工作原理
target_file[strcspn(target_file, "\n")] = '\0'这行代码能精准定位换行符并替换成空值,关键靠strcspn函数:
strcspn会扫描target_file字符串,从开头开始计数,直到找到第一个'\n'字符(也就是用户输入的换行符),返回的数字就是这个换行符的索引位置(C语言字符串索引从0开始)。- 拿到这个索引后,直接把
target_file对应位置的字符替换成'\0',就能把换行符截断掉,让target_file变成符合要求的C风格字符串。
结合代码场景补充
你用fgets读取文件名时,用户输入完按回车,fgets会把回车对应的'\n'也一并读进target_file数组里。如果不处理这个换行符,后续用fopen打开文件时会因为文件名包含无效字符而失败,这行代码就是专门做这个清理工作的。
另外提一句,你的代码里if(target_file == NULL)这个判断是无效的:target_file是数组名,它永远不会等于NULL,fgets读取失败时是返回NULL,正确的判断应该是if(fgets(...) == NULL),这个判断可以删掉或者调整位置。
原代码
printf("enter destination file name to print : "); fgets(target_file, sizeof(target_file), stdin); target_file[strcspn(target_file, "\n")] = '\0'; if(target_file == NULL){ printf("enter any key to exit ....!\n"); exit(EXIT_FAILURE); } writting_file = fopen(target_file, "w"); if(writting_file == NULL){ printf("error to open the file\n"); printf("please enter any key to EXIT.......!\n"); exit(EXIT_FAILURE); }
内容的提问来源于stack exchange,提问作者yokeshwaran
相关产品推荐
相关产品推荐

