繁体   English   中英

strtok - 用 c 中的字符标记 txt 文件

[英]strtok - Tokenize txt file with characters in c

我有一个带有分隔符 ';' 的 txt 文件。
我正在使用 fgets 在 C 中读取此文件并使用strtok标记字段。

文件记录示例 -
500;Y;一些错误信息

我想在其中加载文件的 C 结构

typedef errRec{
    long id;
    char fail_ind;
    char error_msg[1000];
}errrec_t;

我正在标记文件字段,如下所示。
warning #167: argument of type "YESNOIND_C_T={char}" is incompatible with parameter of type 
"char*__restrict__";
strcpy(errRec.fail_ind,strtok(NULL,";"));

问题: strcpy 对 id 和 error_msg 正常工作,但对字符类型的 fail_ind 不起作用。
我收到警告 -

 warning #167: argument of type "YESNOIND_C_T={char}" is incompatible with parameter of type "char*__restrict__"; strcpy(errRec.fail_ind,strtok(NULL,";"));

如何将 strtok 中的这个字符存储在 fail_ind 或我可以存储该字符的不同方式是什么?

经过一些建议,我尝试使用 strsep 而不是 strtok 来处理 NULL 值 -

errRec.fail_ind = *(strsep(&fileRecPtr,";"));

您认为这种方法是否正确,尤其是在行下方存储字符是否正确?

 errRec.fail_ind = *(strsep(&fileRecPtr,";"));

如果您忽略程序崩溃的风险,您可以使用:

errRec.fail_ind = *strtok(NULL, ";");

这是有风险的——如果strtok()返回一个空指针,你的程序可能会崩溃(对于strtok()的其他用途也是如此)。 一个更安全的版本保存并检查指针:

char *ptr = strtok(NULL, ";");
if (ptr == NULL)
    …report error; do not continue…
errRec.fail_ind = *ptr;

这不会验证失败指示符是否为单个字符; 这是否重要取决于您。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM