Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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 - Fatal编程技术网

C 从文件填充结构数组

C 从文件填充结构数组,c,C,显然,这是一项非常简单的任务,但到目前为止,我已经为此奋斗了一段时间 我正在对结构数组进行序列化。每个结构由两个数组组成 然后,我尝试从文件中读取并填充我的结构数组。 该文件由字符串组成,类似于: sign1 path1 sign2 path2 sign3 path3 我在填充和打印阵列时遇到问题。 非常感谢您的帮助。 谢谢 似乎您的输入是在符号路径行中,符号和路径之间用空格分隔。您可以使用fgets读取整行,然后调用strtok获取这两个令牌。此代码未经测试 void riempi_riga

显然,这是一项非常简单的任务,但到目前为止,我已经为此奋斗了一段时间

我正在对结构数组进行序列化。每个结构由两个数组组成

然后,我尝试从文件中读取并填充我的结构数组。 该文件由字符串组成,类似于:

sign1 path1
sign2 path2
sign3 path3

我在填充和打印阵列时遇到问题。 非常感谢您的帮助。 谢谢


似乎您的输入是在符号路径行中,符号和路径之间用空格分隔。您可以使用fgets读取整行,然后调用strtok获取这两个令牌。此代码未经测试

void riempi_riga(riga* r, FILE* f1) 
{
    char *tok;
    char buf[sizeof(r->firma)+sizeof(r->path)];
    if (fgets(buf, sizeof(buf), f1) != NULL)
    {
        if ((tok = strtok(buf)) != NULL)
        {
            strncpy(r->firma, tok, sizeof(r->firma));
            r->firma[sizeof(r->firma)-1]=0;
            if ((tok = strtok(NULL)) != NULL)
            {
                strncpy(r->path, tok, sizeof(r->path));
                r->path[sizeof(r->path)-1]=0;
            }
        }
    }
}

而c=fgetcf1!=EOF->fgetc返回整数。c需要整数而不是图表!但这并不能解决我的问题。还有什么需要帮助的吗?我在填充和打印阵列时遇到了问题。我们的确切问题是什么?顺便说一句,意大利语的变量名和文本会影响问题的清晰度。是的。我知道。但是你遇到了什么问题?我看你的东西没有什么不好的地方。除非你想要:fgetsr->firma,333,f1;代替fgetsr->firma,33,f1;或者更好:fgetsr->firma,sizeofr->firmat,f1;您的输入格式如何?您是否需要使用fgets读取整行内容,然后使用strtok在空格上标记?我不能简单地使用fscanff1,%s%s,r->firma,r->path吗?使用它的负面影响是什么?%s在遇到空格时会自动停止,不是吗?fgets读取换行符。如果你想使用scanf的各种功能,我建议使用fgets加sscanf。请确保在%s格式字符串中指定最大字符数。
void riempi_riga(riga* r, FILE* f1) 
{
    char *tok;
    char buf[sizeof(r->firma)+sizeof(r->path)];
    if (fgets(buf, sizeof(buf), f1) != NULL)
    {
        if ((tok = strtok(buf)) != NULL)
        {
            strncpy(r->firma, tok, sizeof(r->firma));
            r->firma[sizeof(r->firma)-1]=0;
            if ((tok = strtok(NULL)) != NULL)
            {
                strncpy(r->path, tok, sizeof(r->path));
                r->path[sizeof(r->path)-1]=0;
            }
        }
    }
}