Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.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,} 在我的文件parque.txt中,我有一行代码,例如9h00 12h30 我想访问那个文件,一行一行地获取时间,这样我就可以减去并知道一次和另一次之间经过的时间。问题是,当我尝试将它从文件传递到临时字符串时,在这种情况下:hora_I=9,min_I=00,hora_f=10,min_f=30,然后我打印它,得到的结果是:hora_I=9,min_I=009,hora_f=10009,min_f=3010009。有人能解释一下为什么会发生这种情况吗?您的程序失败的原因是您忘记了在字符串中添加

}

在我的文件parque.txt中,我有一行代码,例如9h00 12h30
我想访问那个文件,一行一行地获取时间,这样我就可以减去并知道一次和另一次之间经过的时间。问题是,当我尝试将它从文件传递到临时字符串时,在这种情况下:hora_I=9,min_I=00,hora_f=10,min_f=30,然后我打印它,得到的结果是:hora_I=9,min_I=009,hora_f=10009,min_f=3010009。有人能解释一下为什么会发生这种情况吗?

您的程序失败的原因是您忘记了在字符串中添加尾随null。这就产生了字符串不够长的问题。由于正在读取长度未知的数据,因此也无法确保传入字符串不会溢出目标数组。这些问题存在于每个循环中。修复它们将违反法律

说真的,是时候回到起点了。编写一个函数将字符串读入分隔符,对照长度进行检查,并多次调用该函数。这是函数签名,让您开始

void calcula_estacionamento(){
FILE *f;
int n=0,i=0;
char linha[MAX],hora_i[2]="",min_i[2]="",hora_f[2]="",min_f[2]="";
f=fopen("parque.txt","r");
while(fgets(linha,MAX,f)!=NULL)
{
    while(linha[n]!='h')
    {
        hora_i[i]=linha[n];
        n++;
        i++;
    }
    i=0;
    n++;
    while(linha[n]!=' ')
    {
        min_i[i]=linha[n];
        n++;
        i++;
    }
    i=0;
    n++;
    while(linha[n]!='h')
    {
        hora_f[i]=linha[n];
        n++;
        i++;
    }
    i=0;
    n++;
    while(linha[n]!='\0')
    {
        min_f[i]=linha[n];
        n++;
        i++;
    }
    printf("\n%s %s %s %s",hora_i,min_i,hora_f,min_f);
    n=0;
    i=0;
}

请注意,源是指向指针的指针,因此您可以每次更新它。是的,还有其他方法,只需选择一种并执行即可。

是的,这很有效,我从来没有想到用c来结束字符串,谢谢!
void read_token(char** source, char delimiter, char* destination, int maxlength);