鱼C论坛

 找回密码
 立即注册
查看: 3763|回复: 8

文件打开与关闭

[复制链接]
发表于 2012-7-27 19:49:55 | 显示全部楼层 |阅读模式
1鱼币
#include "stdio.h"
#include "stdlib.h"
void main()
{
FILE *fp;
char ch,filename[2];
scanf("%s",filename);
if((fp=fopen(filename,"w"))==NULL)
{
  printf("this is error\n");
  exit(0);
}
     ch=getchar();
  ch=getchar();
  while(ch!='#')
  {
   fputc(ch,fp);
   putchar(ch);
   ch=getchar();
  }
  putchar(10);
  fclose(fp);
}
这段代码中 我就这处不是很明白是什么意思 filename[2];
这个数组里的[2]是代表里面有2个元素吗?但是我如果输入2个文件名用空格分开好像也只会创建一个,那里面的数字又有什么意义呢?求明白

最佳答案

查看完整内容

你申请了一个char型数组filename[2],然后系统会为他分配一个空间,首地址放到filename这个变量里面,而你scanf的时候是吧输入的字符串放到了以filename这个变量指向地址的内存中,也就是说这时候你是吧输入的字符串直接放到了内存空间中,所以就没有2个char型的限制。而使用的时候会沿着这个首地址完后找,直到找到一个\0,而这段内存中的内容才是你打开文件的名字
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2012-7-27 19:49:56 | 显示全部楼层
你申请了一个char型数组filename[2],然后系统会为他分配一个空间,首地址放到filename这个变量里面,而你scanf的时候是吧输入的字符串放到了以filename这个变量指向地址的内存中,也就是说这时候你是吧输入的字符串直接放到了内存空间中,所以就没有2个char型的限制。而使用的时候会沿着这个首地址完后找,直到找到一个\0,而这段内存中的内容才是你打开文件的名字
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-27 19:57:28 | 显示全部楼层
scanf() 函数 只能接受不带空格的字符串  如果你输入的字符串带有空格 在接受的时候遇到空格 就会结束接受咯  如果你想输入带空格的字符串 就用 gets() 函数来接受  你那定义是一个数组 用来存放文件名的  你定义的长度为2 所以你输入的文件名不能超过2个字符的  [] 里面的数字只是限制你文件名的长度 你自己觉得需要多大就可以定义为多大啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2012-7-28 01:50:31 | 显示全部楼层

但是我限制了2个字符 我却可以输出2个字符以上的文件名 这个又是为什么呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-28 09:35:51 | 显示全部楼层
253009514 发表于 2012-7-28 01:50
但是我限制了2个字符 我却可以输出2个字符以上的文件名 这个又是为什么呢?

你会修改其他变量的值 乱来
然后 你只能输入一个字符 你还得留一个字节存储字符串结束字符 '\0'
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-28 09:37:23 | 显示全部楼层
丿夏夜灬彬刂 发表于 2012-7-27 19:57
scanf() 函数 只能接受不带空格的字符串  如果你输入的字符串带有空格 在接受的时候遇到空格 就会结束接受咯 ...

有一点你得注意一下 char ch[2]; 用%s输入是只能输入1个字符 因为 %s会添加字符串结束字符'\0' 输入2个字符的话 会造成越界
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-28 11:51:37 | 显示全部楼层
我是师兄 发表于 2012-7-28 09:37
有一点你得注意一下 char ch[2]; 用%s输入是只能输入1个字符 因为 %s会添加字符串结束字符'\0' 输入2个字 ...

谢谢指点
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-7-31 11:16:00 | 显示全部楼层
scanf函数输入字符串如果输入了空格,会提前结束本scanf函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2012-9-15 12:50:33 | 显示全部楼层
.......................   问题怎么还是未解决状态?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-14 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表