有关在没有\0的情况下文件名长度的问题

sunyuqian sunyuqian 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
大家好,这道题本身没有问题主要是对文件名长度有疑问,用/**/标出,请高手解答
这道题意思是将原文件名的前5个字符复制给新文件,当新文件名,然后把原文件每3个中的一个字符复制给新文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LEN 10

int main(void)
{
FILE *in, *out;
int ch;
char source[LEN];
char cpy[LEN];
int count = 0;

printf("请输入文件名:\n");
scanf("%s",source);
if ((in = fopen(source, "r")) == NULL)
{
fprintf(stderr, "I couldn't open the file \"%s\"\n",
source);
exit(2);
}
strncpy(cpy,source, LEN - 5);
//cpy[LEN - 5] = '\0';
/*就是这个注释,正确的时候应该不注释它。当我注释后运行时,最多只能输入4个字符的文件名,可以创建成功,再多
就会说fprintf里的"Can't create output file."。我想道字符串没有添加\0为知什么还能在不多于4个字符的文件名的
时候创建文件,多于4个就出错了,这是为什么呢?如果没有添加\0,他应该多少字符都出错,为什么只是在4个字符以上才
出错?*/
strcat(cpy,".txt");
if ((out = fopen(cpy, "w")) == NULL)
{
fprintf(stderr,"Can't create output file.\n");
exit(3);
}
while ((ch = getc(in)) != EOF)
if (count++ % 3 == 0)
putc(ch, out);
if (fclose(in) != 0 || fclose(out) != 0)
fprintf(stderr,"Error in closing files\n");
return 0;
}
...全文

相关推荐

评论 12
收藏 已收藏
分享
返回顶部
sunyuqian
C语言 70,039 成员 243,237 内容