检查char数组是否不是垃圾? (有效字符)

标签 c eeprom

我有一个 char 数组,它在硬件中从某个 EEPROM 设备读取数据,如果那里没有数据,它的值可以是任何值(垃圾)。

我想检查他的值是不是垃圾并且有一些有效字符

                       for(int k=address;k<address+MEM_MAX_LEN;k++)
                       {
                           charBuf[k-address]= EEPROM.read(k);
                           if(charBuf[k-address]=='*')
                         {
                              charBuf[k-address]='\0';
                              break;
                         }

当使用 strlen>1 我没有得到想要的响应(显然)。

如何查看?

最佳答案

你永远无法确定,因为垃圾看起来像是有效的文本,但你可以做出合理的猜测。像这样,假设一个有效的字符串应该以 NUL 结尾并且只包含可打印的字符:

#include <ctype.h> // For isprint

// ....

int length = 0;
while (length < MEM_MAX_LEN && charBuf[length] != '\0')
    ++length;

if (length == 0) {
    printf("Empty string. Probably garbage!\n");
    return 0;
}

if (length == MEM_MAX_LEN) {
    printf("No NUL byte found. Probably garbage!\n");
    return 0;
}

for (int i = 0; i < length; ++i) {
    if (!isprint((unsigned char)charBuf[i])) {
        printf("Unprintable char (code %d) at position %d. Probably garbage!\n",
               (unsigned char)charBuf[i], i);
        return 0;
    }
}

printf("String consists of %d printable characters. Probably not garbage!\n", length);
return 1;

关于检查char数组是否不是垃圾? (有效字符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33346733/

相关文章:

c - 如何去掉这个程序中的垃圾字符?

stm32 - 使用 HAL 驱动程序在 stm32 上进行 EEPROM 仿真

verilog - 如何在FPGA中永久存储数据和程序?

embedded - 具有相同地址的 i2c 从设备

c# - 将 Julia 嵌入到 C# : Garbage Collector Rewrite into C# Issues and Questions

c - 通过添加数组c来实现延迟效果

c - 将数据存储在 EEPROM、微 Controller 中

c++ - 阿杜伊诺错误 : expected initializer before * token

c - 如何从 Flash 调用 C 函数?

c - 从一个大数字中读取数字作为单个数字