文件到char和char到数组C.

时间:2014-06-15 00:48:36

标签: c

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;
}

}

在我的文件" parque.txt"中,我有一行例如" 9h00 12h30" 我想访问该文件,逐行获取时间,这样我就可以减去并知道一次和另一次之间经过的时间。问题在于,当我尝试将其从文件传递到临时字符串时(在这种情况下:hora_i =" 9",min_i =" 00",hora_f =" 10& #34;,min_f =" 30")然后我打印出来的是:hora_i =" 9",min_i =" 009",hora_f =& #34; 10009",min_f =" 3010009"。有人可以向我解释为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

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

说真的,是时候回到起点了。编写单个函数以将字符串读取到分隔符,检查长度,并多次调用该函数。这是让你入门的功能签名。

void read_token(char** source, char delimiter, char* destination, int maxlength);

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