[英]read() buffer has invalid data (pointer issue?)
我有一个问题,以下函数中的数据数组有一些糟糕的值(在我看来就像一些内存位置):
int
GPIO::GetValue() {
char data[1];
if (read(_valuefd, data, 1) < 0) {
perror("Error on reading value fd");
return -1;
}
printf("int GPIO::GetValue() %s\n", data);
if (strcmp(data, "1") == 0) {
return GPIO_VALUE_ON;
}
if (strcmp(data, "0") == 0) {
return GPIO_VALUE_OFF;
}
return -1;
}
printf的结果:
int GPIO::GetValue() 0cx$??ݾ??˶8@l
我不知道这是怎么回事。 我在一些可以正常工作的简单程序中提取了相同的代码。 还有其他一些功能GPIO :: GetDirection可以执行相同的操作,并且效果很好。 我猜这里有一些内存,指针,分配问题。
怎么了?
博多
我认为您得到正确的结果。 只是null终止字符串data
。
char data[2];
data[1] = '\0';
实际上,您不需要声明数组。 只是char data;
足够。 那么您可能需要进行以下更改:
char data;
if (read(_valuefd, &data, 1) < 0) {
perror("Error on reading value fd");
return -1;
}
printf("int GPIO::GetValue() %c\n", data);
if (data == '1') {
return GPIO_VALUE_ON;
}
else if (data == '0') {
return GPIO_VALUE_OFF;
}
else {
return -1;
}
“数据”数组的长度为1个字节。 如果要以字符串形式打印,则必须以“ \\ 0”结尾。 或者,尝试使用%c代替%s。
printf("int GPIO::GetValue() %s\\n", data);
您尝试显示一个字符*。 但是由于数组的大小为1,printf不知道何时停止读取,因为他找不到'\\ 0'。
printf("int GPIO::GetValue() %c\\n", data[0]);
如果您使用大小为1的数组
而且您的strcmp可能会失败,请尝试使用大小为1的strncmp
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.