[英]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.