[英]Parsing a string prints garbage
我在解析字符串时遇到此问题,也许您可以帮上忙。
我不是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
其中包括一些先前的数据+垃圾。
我提取数据的方式有问题吗?
当事情大部分时间都在起作用,但有时却会产生垃圾,这是未定义的行为。 这意味着DataIn
指向无效的内存-已经取消分配的内存或已完成工作的函数的堆栈上分配的内存。
诊断和解决此问题的最佳方法是通过内存分析器(例如valgrind)运行代码。
注意:循环结束有两种情况:
count
达到2(正常退出),或 p
设置为NULL
(暂停) 但是,搜索endPointer
的代码假定p
没有任何检查都不为NULL
,这意味着当循环在break
退出时,程序可能会崩溃。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.