标题:文件操作:简单压缩程序
只看楼主
l13547126124
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-22
结帖率:0
已结贴  问题点数:20 回复次数:13 
文件操作:简单压缩程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
    FILE *in, *out;
    int ch;
    char name[LEN];
    int count = 0;
    if (argc < 2)
    {
        fprintf(stderr, "usage:%s filename \n", argv[0]);
        exit(EXIT_FAILURE);
        }
    if ((in = fopen(argv[1], "r")) == NULL)
    {
        fprintf(stderr, "i couldn't open the file \"%s\"\n", argv[1]);
        exit(EXIT_FAILURE);
            }
    strncpy(name, argv[1], LEN - 5);
    name[LEN - 5] = '\0';
    strcat(name, ".red");
    if ((out = fopen(name, "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;

}
搜索更多相关主题的帖子: include count file 
2017-03-22 15:48
l13547126124
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-22
得分:0 
程序多处看不懂,麻烦详细解释下。程序中 main (int argc ,char *argv [])不懂,文件操作更是没有看明白。程序运行也不成功
2017-03-22 15:51
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:5 
不是很懂哦,argc ,argv[i]中的值是怎么来的?帮你顶下。
2017-03-22 16:02
l13547126124
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2017-3-22
得分:0 
回复 3楼 ehszt
谢谢
2017-03-22 16:09
花脸
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:9
帖 子:788
专家分:907
注 册:2017-1-4
得分:5 
int argc ,char *argv []  这是定义整形变量 argc 和 char型指针数组argv []
2017-03-22 21:23
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:5 
c控制台程序中 main主函数所附带的int main(int argc, char *argv[])

其含义是这样的  argc 返回参数的个数  而argv则取每一个具体的参数


DO IT YOURSELF !
2017-03-22 21:28
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
可以这样来做一个简单的实验
程序代码:
int main(int argc, char *argv[])
{
    printf("本次传入参数%d 个\n",argc);
    for(int i=0;i<argc;i++)
    {
        printf("第%d 个参数是 %s\n",i+1,argv[i]);
    }
}

/*
D:\c_source\w2\Debug>w2 a.txt b.txt /a
本次传入参数4 个
第1 个参数是 w2
第2 个参数是 a.txt
第3 个参数是 b.txt
第4 个参数是 /a
*/


DO IT YOURSELF !
2017-03-22 21:33
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
哦我明白了,楼主程序里的argv[1]是一个文件路径,这个路径是通过执行程序中附加参数输进去的。
在DEV c++中可通过运行-〉参数菜单输入。其他软件就不清楚了。不过如果是用命令行执行程序可以在执行程序后面加上路径.
比如执行程序名为a.exe 需要操作的文件路径为c:\b.txt
那么就在命令行中这样输入 a.exe c:\b.txt (先要进入a.exe所在目录)
2017-03-22 21:48
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
一楼的代码 确实无法通过编译 简单修改一下
程序代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define LEN 256

int main(int argc, char *argv[])
{
    FILE *in, *out;
    int ch;
    char name[LEN];
    int count = 0;
    if (argc < 2)
    {
        fprintf(stderr, "usage:%s filename \n", argv[0]);
        exit(EXIT_FAILURE);
    }
    if ((in = fopen(argv[1], "r")) == NULL)
    {
        fprintf(stderr, "i couldn't open the file \"%s\"\n", argv[1]);
        exit(EXIT_FAILURE);
    }
    strncpy(name, argv[1], LEN - 5);
    name[LEN - 5] = '\0';
    strcat(name, ".red");
    if ((out = fopen(name, "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;

}
但仅仅能够编译链接  

DO IT YOURSELF !
2017-03-22 21:52
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
得分:5 
你用VS的话,那么你就要被迫接受一堆MS的私货函数。当然问题不在于这些函数,而在于这些函数在别的编译器上完全不能用。

我靠,看了下报错,VS竟然连strncpy都默认不应该使用。

你的代码主要问题在于LEN没有定义。
其他的错误,你要自行搜索,怎么关闭VS的安全检查,因为VS在默认的情况下,认为很多函数不安全。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-03-23 07:21



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-475373-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.765149 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved