Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 以下代码不适用于';不行。。为什么?_C_Arrays_String_Struct_Io - Fatal编程技术网

C 以下代码不适用于';不行。。为什么?

C 以下代码不适用于';不行。。为什么?,c,arrays,string,struct,io,C,Arrays,String,Struct,Io,以下代码未按预期工作 #include <stdio.h> #include <unistd.h> #include <string.h> #include <stdbool.h> struct dest { char filename[20], keyword[20]; bool opened; FILE * stream; }; void display_data(const struct dest p) {

以下代码未按预期工作

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

struct dest
{
    char filename[20], keyword[20];
    bool opened;
    FILE * stream;
};


void display_data(const struct dest p) {
    printf("Keyword: %s, Filename: %s, Used: %s\n", p.keyword, p.filename, p.opened ? "Yes" : "No");
}

int main(int argc, char const *argv[])
{
    // float lon, lat;
    // char info[80];

    if ((argc+1) % 2) {
        fprintf(stderr, "Usage: %s file_to_read file_for_unknown type file type file ...\n", argv[0]);
        return 2;
    }

    if (access(argv[1], F_OK) == -1) {
        fprintf(stderr, "File can't be accessed: %s\n", argv[1]);
        return 2;
    }

    const short pairs = (argc-3)/2;
    struct dest data[pairs];

    short times = 4;
    for(short i = 4; i < argc; i += 2) {
        struct dest data[i-times];
        data[i-times].opened = false;
        strcpy(data[i-times].keyword, argv[i-1]);
        strcpy(data[i-times].filename, argv[i]);
        // display_data(data[i-times]);
        times += 1;
    }

    display_data(data[0]);

    return 0;
}
#包括
#包括
#包括
#包括
结构目标
{
字符文件名[20],关键字[20];
布尔开了门;
文件*流;
};
无效显示数据(常量结构目标p){
printf(“关键字:%s,文件名:%s,使用过的:%s\n”,p.Keyword,p.Filename,p.opened?“是”:“否”);
}
int main(int argc,char const*argv[]
{
//浮子长度,lat;
//字符信息[80];
如果((argc+1)%2){
fprintf(stderr,“用法:%s文件\u到\u读取文件\u,用于\u未知类型文件…\n”,argv[0]);
返回2;
}
if(访问(argv[1],F_OK)=-1){
fprintf(stderr,“无法访问文件:%s\n”,argv[1]);
返回2;
}
常量短对=(argc-3)/2;
结构目标数据[对];
短时间=4;
对于(短i=4;i
这就是我尝试运行它时发生的情况。

/分类spooky.csv其他.csv UFO UFO.csv
关键字:?,文件名:�@, 已使用:否

这不是很有意义。
我一直在努力想出解决办法。。静脉注射..
我不明白问题出在哪里。

参数解析如下:

第一个参数:程序应该从中读取的文件(暂时忽略)
第二个参数:程序应该存储在spooky.csv文件中的任何未知信息中的文件(在此实现中也被忽略)
其他参数:它们成对解析,第一个是关键字,第二个是文件

我对这个过滤问题的解决方案是创建一个结构数组,在每个结构中我存储关键字、文件名和文件io流(我现在忽略它)


非常感谢您的帮助。

您有2个
struct dest data[]
数组。内在的一面掩盖了外在的一面——摆脱它


如果打开了警告,编译器可能会对此发出警告。

您有2个
struct dest data[]
数组。内在的一面掩盖了外在的一面——摆脱它


如果打开了警告,编译器可能会对此发出警告。

所以。。。如何将数组元素声明为结构?@AmrAyman:FWIW,我已经获取了您的代码,删除了第二个数据声明,在我的系统上编译并运行了它(SLES 10上的gcc-std=c99-pedantic-Wall-Werror
),它生成了预期的输出;我没有遇到分段错误。@JohnBode谢谢,这是我尝试并引发分段错误的代码:data[0]。opened=false;strcpy(数据[0]。关键字,argv[4]);strcpy(数据[0]。文件名,argv[5]);printf(“关键字:%s,文件名:%s,已使用:%s\n”,数据[0]。关键字,数据[0]。文件名,数据[0]。是否打开?“是”:“否”);所以如何将数组元素声明为结构?@AmrAyman:FWIW,我已经获取了您的代码,删除了第二个数据声明,在我的系统上编译并运行了它(SLES 10上的gcc-std=c99-pedantic-Wall-Werror),它生成了预期的输出;我没有遇到分段错误。@JohnBode谢谢,这是我尝试并引发分段错误的代码:data[0]。opened=false;strcpy(数据[0]。关键字,argv[4]);strcpy(数据[0]。文件名,argv[5]);printf(“关键字:%s,文件名:%s,已使用:%s\n”,数据[0]。关键字,数据[0]。文件名,数据[0]。是否打开?“是”:“否”);为什么
if((argc+1)%2)
而不是
if(argc!=NUM\u ARGS\u预期)
?这会更清楚。@FiddlingBits因为它应该接受尽可能多的参数,只要它们是从第二个参数开始的成对参数。.为什么
if((argc+1)%2)
而不是
if(argc!=NUM_ARGS_预期)
?这会更清楚。@FiddlingBits,因为它应该接受尽可能多的参数,只要它们是从第二个参数开始的成对参数。。