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