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"。有人可以向我解释为什么会这样吗?
答案 0 :(得分:0)
程序失败的原因是您忘记将尾部空值添加到字符串中。这就产生了字符串不够长的问题。由于您正在读取未知长度的数据,因此您也无法确保传入的字符串不会溢出目标数组。每个循环中都存在这些问题。修复它们将违反DRY。
说真的,是时候回到起点了。编写单个函数以将字符串读取到分隔符,检查长度,并多次调用该函数。这是让你入门的功能签名。
void read_token(char** source, char delimiter, char* destination, int maxlength);
请注意,source是指向指针的指针,因此您每次都可以更新它。是的,还有其他方法,只需选择一个即可。