关于fopen函数第一个参数为数组的问题

原问题:关于fopen函数第一个参数为数组的问题
分类:编程开发 > 最后更新时间:【2017-07-25 22:31:02】
问题补充:

利用fopen函数打开文件

用数组作为第一个参数,那么假设输入的相对路径小于数组下标的个数,那么为什么会出现打开文件失败?

但是输入的相对路径字符数刚好等于数组下标个数时,文件能创建并且能打开,想问问这是什么原因。

试过调试,除了输入的字符数组其他元素全是问号。

补充:当SLEN为8的时候,输入888.txt加上一个'\0'作为数组结尾,刚好是8个,此时程序正常运行当SLEN为80的时候,输入888.txt却不能正常运行?想问问这个宏定义的SLEN作为数组下标为什么会这样子??

最佳答案

C的字串要以\0结尾的

你的数组要么先初始化为0

char s[10]={0};

要么,要在字串真正结尾处加\0

s[0]='0';

s[1]='1';

s[2]='2';

s[3]='\0';

这样,用s时才会得到"012"


追问:
请看一下我补充的内容为什么会出现这种情况? 追答:
就你上面说的情况,这个是正常的啊因为若你小于下标个数的话,其它没初始化的数据为随机数,也就是你说的问号而若你刚好等于数组下标个数时,你程序的最后估计有一个\0所以是正常的了我上面已给你解释和解决方案了,你可以试下当然,最好是贴你的程序上来
追问:
全部初始化为0还是打不开部分代码已经截出来了,帮忙看一下什么情况?
追问:
slen为80 追答:
我不是很理解你为什么会要自己写一个s_getc函数系统本身的fgets完全可以满足你程序的要求的(我有时间会测试下你的这个函数)
追问:
写个s_getc是为了为了替换换行符等你好消息 追答:
若你用控制台输入字符串的话,可用gets代替fgets它的返回是不含回车的.你先试下
追问:
用不了gets,我已经加了预编译头#include,找不到gets这个函数
追问:
可以了,我用了另外一种方法将换行替换空白符顺便问一下,为什么我用strchr快速查找换行符那种方式不行??? 追答:
找到你问题所在了(调试了半天,晕了....)你程序的find="\0";写错了,应该是*find="\0";你改为指针的值,不是改内容了你的返回没有去掉\n的

  • 追问:
    还真是这个错误!!!粗心了不过谢谢啦
    最佳答案由网友  whoami1978  提供
  • 公告: 为响应国家净网行动,部分内容已经删除,感谢网友理解。
    16

    分享到:

    其他回答

    其它网友回答:
    发代码

    其它网友回答:
    没代码谁知道你在说啥


    追问:
    请看一下我补充的内容 为什么会出现这种情况?

    其它网友回答:
    int main(int,**char)是main函数的标准形式,我们通常写的void main()是它的简化版。就算写成void main()的形式,操作系统依然会把这两个参数传过来,只是我们不能在main函数中使用它们而已。两个参数的含义:第一个argc表示的是通过命令行传过来的参数个数,第二个args可以理解成一个字符串数组,它保存从操作系统传进main函数的参数列表。需要注意的是程序的文件名会作为第一个参数被传入。可以得知的是:args[0]是程序的文件名,argc的最小值是1。而放在文件名后面的参数是从args[1]开始的(实际输入时以空格分隔),因此上面程序读取参数时取的是args[1]而不是args[0]。


    追问:
    可是我并不是在命令行输入参数,我是直接vs编译运行的 请看一下我补充的内容 为什么会出现这种情况?
      推荐