gpt4 book ai didi

c - token 存储不当?文件解析问题

转载 作者:行者123 更新时间:2023-11-30 15:10:35 24 4
gpt4 key购买 nike

我正在开发一个项目,需要对文件中的一些数据进行排序。该文件是一长串由“制表符空格”分隔的字符串(我认为该文件是分隔的,但我不确定)。以下是该文件一行的示例:

2986043 Pic de Font Blanca Pic de Font Blanca Pic de Font Blanca,Pic du Port 42.64991 1.53335 T PK AD

中间的两个 double (e/g:42.64991 和 1.5335)是我所关心的,因为我将存储它们并稍后使用它们进行排序。这只是使用前 1000 行输入的数组的原型(prototype),但文件的实际大小约为数百万行。实际的数据结构将是某种链接列表(我认为?不确定什么最适合这种工作)

这是一组循环,我在其中标记文件指针中的字符串,并尝试将字符串复制到我设置的指针数组中:

  int curr_line=0;
int longlat;
char* coord[1000][2];

/* clock starts to time process
* this pair of loops works through each line of the file, token by token
*
*/
start = clock();
while(fgets(duff, 512, (FILE*)fp) !=NULL)
{
int coordFlag=0;
//char* token=strtok(duff, " ");
char* token=strtok(duff, " \t");
while(token)
{
if(verify(token))
{
//printf("tok: %s\n", token);
coordFlag++;
if(coordFlag==1)
{
printf("%s||", token);
strcpy(coord[curr_line][0], token);

}
if(coordFlag==2)
{
printf("%s\n", token);
strcpy(coord[curr_line][1], token);

}
}
//printf("tok: %s\n", token);

token=strtok(NULL, " \t");


}
curr_line++;
if(curr_line==1000) break;

}

目前,我遇到运行时错误,程序在尝试存储第一个字符串时崩溃。我相信我错误地使用了数组和/或字符串和标记的字符指针。

我的主要目标是解析由空格和分隔制表符分隔的字符串行,并获取中间的两个字符串(经度和纬度),并将它们存储在数组中。

作为一个后续问题,这个存储如何以双倍方式完成。例如,我可以解析 token ,然后创建一个空白的 double 变量,复制解析后的 token 并将其存储为带有类型转换的 double 值,还是一些更有效的策略?

最佳答案

您正在使用未初始化且无意义的指针来存储 token ,这是非常糟糕的。

在复制字符串之前分配缓冲区用于存储标记。

if(coordFlag==1)
{
printf("%s||", token);
coord[curr_line][0] = malloc(strlen(token) + 1); // add this line
strcpy(coord[curr_line][0], token);

}
if(coordFlag==2)
{
printf("%s\n", token);
coord[curr_line][1] = malloc(strlen(token) + 1); // add this line
strcpy(coord[curr_line][1], token);

}

注释:

  • 不要忘记 +1 来终止空字符。
  • 添加一些代码来检查 malloc() 是否成功并处理错误将使此代码变得更好。

关于c - token 存储不当?文件解析问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36075182/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com