簡體   English   中英

解析字符串會打印垃圾

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM