免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1892 | 回复: 8
打印 上一主题 下一主题

[C] 请教问题fopen [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-30 10:11 |只看该作者 |倒序浏览
我写了一个fopen的学习程序,运行过去后,打印出来
Cannot open input the file
我的目录中也有$HOME/zlj/ex/win 这个文件,为什么文件读出来是NULL,写不进去呢,谢谢大家指导


#include    <stdio.h>
#include    <string.h>

int main()
{
    FILE *fp;
    char sFpNm[50];

    sprintf(sFpNm,"$HOME/zlj/ex/win");
    printf("haha--%s\n",sFpNm);

    if ((fp = fopen(sFpNm,"wr")) == NULL ){
       fprintf(stderr, "Cannot open input the file \n");
       return 100;
    }

    fprintf(fp,"%s|%s\n","hahahouhou","houhouhaha");

    fclose(fp);

    return 0;

}

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2009-07-30 10:16 |只看该作者
你的程序必须自己解析$HOME,用实际的目录替代

论坛徽章:
0
3 [报告]
发表于 2009-07-30 10:20 |只看该作者
谢谢,改为实际目录就可以了。
还想问一下,在什么情况下可以用$HOME来做目录呢

论坛徽章:
0
4 [报告]
发表于 2009-07-30 10:28 |只看该作者

回复 #3 zlj0721 的帖子

$HOME是shell里面的环境变量,你的程序是由shell启动的,应该也会继承这个环境变量。但是在C里面取环境变量还是比较麻烦的,取出来还要自己解析,很少有人会这么做。

论坛徽章:
0
5 [报告]
发表于 2009-07-30 10:34 |只看该作者
谢谢

论坛徽章:
0
6 [报告]
发表于 2009-07-30 12:51 |只看该作者
4楼的


回复 #3 zlj0721 的帖子
$HOME是shell里面的环境变量,你的程序是由shell启动的,应该也会继承这个环境变量。但是在C里面取环境变量还是比较麻烦的,取出来还要自己解析,很少有人会这么做。

我尝试了一下,可以在 .profile 中定义
export DWNDIR=$HOME/dwn
就可以执行下面的带$HOME路径的程序了
#include    <stdio.h>
#include    <string.h>

int main()
{
    FILE *fp ;
    char sFpNm [50];

    sprintf(sFpNm ,"%s/%s",(char *)getenv("DWNDIR"),"win");
    printf("haha--%s\n",sFpNm );

    if ((fp = fopen(sFpNm,"w")) == NULL ){
       fprintf(stderr, "Cannot open input the file \n");
       return 100;
    }

    fprintf(fp ,"%s|%s\n","oooooo","qqqqqq");

    fclose(fp);

    return 0;

论坛徽章:
0
7 [报告]
发表于 2009-07-30 13:04 |只看该作者
楼上,不必用 .profile 那样搞, getenv 直接可以拿到 HOME 环境变量的值。

如下:
#include <stdio.h>
#include <stdlib.h>

int main()
{
        printf("%s\n", getenv("HOME"));

        return 0;
}

论坛徽章:
0
8 [报告]
发表于 2009-07-30 13:06 |只看该作者
ok,谢谢指教

论坛徽章:
0
9 [报告]
发表于 2009-07-30 13:10 |只看该作者
嗯,,不谢,如果想列出所有环境变量可以这样做,原理请看 apue 相关内容:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv, char **env)
{
        while (*env)
                puts(*env++);

        return 0;
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP