我有一个 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/