gpt4 book ai didi

c - Strtok - 在行尾读取空字符串

转载 作者:太空宇宙 更新时间:2023-11-04 02:58:31 26 4
gpt4 key购买 nike

在我下面的代码中,我使用 strtok 从文件中解析一行代码,如下所示:

1023.89,863.19  1001.05,861.94  996.44,945.67   1019.28,946.92  1023.89,863.19

由于文件可以有不同长度的行,所以我不使用 fscanf。除了一个小故障外,下面的代码有效。它循环了太多次并读入一个长空字符串“”,然后再次循环识别空标记“”并退出 while 循环。我不知道为什么会这样。

如有任何帮助,我们将不胜感激。

fgets(line, sizeof(line), some_file);    
while ((line != OPC_NIL) {
token = strtok(line, "\t"); //Pull the string apart into tokens using the commas
input = op_prg_list_create();
while (token != NULL) {
test_token = strdup(token);
if (op_prg_list_size(input) == 0)
op_prg_list_insert(input,test_token,OPC_LISTPOS_HEAD);
else
op_prg_list_insert(input,test_token,OPC_LISTPOS_TAIL);
token = strtok (NULL, "\t");
}
fgets(line, sizeof(line), some_file);
}

最佳答案

您必须使用正确的分隔符列表。您的代码与评论相矛盾:

token = strtok(line, "\t"); //Pull the string apart into tokens using the commas

如果您想用逗号分隔标记,请使用 "," 而不是 "\t"。此外,您当然不希望标记包含换行符 \n(出现在 fgets 从文件中读取的每一行的末尾)。所以将换行符添加到分隔符列表中:

token = strtok(line, ",\n"); //Pull the string apart into tokens using the commas
...
token = strtok (NULL, ",\n");

您可能还想将空格字符添加到分隔符列表中(863.19 1001.05 是单个标记还是两个标记?您想删除行尾的空格吗?)。

关于c - Strtok - 在行尾读取空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14755437/

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