我有解析字符串的问题,也许你可以提供帮助。
我不是来自C领域,所以请尽量对我做的愚蠢事情保持耐心。
我有这个:
#include <stdio.h>
#include <string.h>
char DataIn[65] = "WV,000B,404C494748543B.";
int main()
{
char *p = DataIn;
puts(DataIn);
for (int count = 0;count<2 ; ++count) {
p = strstr(p, ",");
if (!p )
break;
p++;
}
char *endPointer = strchr(p, '.');
*endPointer = '\0';
puts(p);
}
此示例中我想要的输出是:404C494748543B
(可以有不同的长度)。
当我打印p
时,通常就可以了,但有时,只是偶尔,我明白了:
404C494748543B
X
@LIGHT;
��
@LIGHT;
��03
其中包括一些以前的数据+垃圾。
我提取数据的方式有问题吗?
答案 0 :(得分:2)
当事情大部分时间都在工作,但有时你会得到垃圾,这是不确定的行为。这意味着DataIn
指向无效内存 - 已取消分配的内容,或者已在已完成工作的函数的堆栈上分配。
诊断和解决此问题的最佳方法是通过内存分析器运行代码,例如valgrind。
注意:循环结束时有两种情况:
count
到达2(正常退出)或p
设置为NULL
(休息时)但是,搜索endPointer
的代码假设p
没有NULL
而没有任何检查,这意味着当循环退出break
时,您的程序可能会崩溃