我似乎无法理解这里发生的事情:
我有一个函数可以计算两个日期之间的差异,以秒为单位。然后它被四位移位以产生一些输出:
void GetUTC(unsigned char buffer[5])
{
struct tm str_time;
time_t start;
time_t current = time(NULL);
str_time.tm_year = 2010 - 1900;
str_time.tm_mon = 1;
str_time.tm_mday = 1;
str_time.tm_hour = 0;
str_time.tm_min = 0;
str_time.tm_sec = 0;
str_time.tm_isdst = 0;
start = mktime(&str_time);
printf("%s\n",ctime(&start));
printf("%s\n\n",ctime(¤t));
uint32_t someInt = difftime(current,start);
buffer[0] = 2;
buffer[1] = (someInt & 0xff);
someInt = someInt >> 8;
buffer[2] = (someInt & 0xff);
someInt = someInt >> 8;
buffer[3] = someInt;
someInt = someInt >> 8;
buffer[4] = (10 & 0xff);
}
我把这个数组喂它:
unsigned char toWrite[5];
然后叫它
GetUTC(toWrite);
一切顺利。现在,我有一个函数,我正在尝试将新数组输入,它采用以下参数:
void gatt_write_attribute(GDBusProxy *proxy, const char *arg)
我称之为:
gatt_write_attribute(someProxy, toWrite);
然而,我传递给函数gatt_write_attribute
的数组显示它是混乱的垃圾:$2\20023\n23
而不是我期望的toWrite值。 (数字不同,因为它与时间有关):
[0]: 2
[1]: 23
[2]: 54
[3]: 128
[4]: 10
我尝试在\0
的末尾添加终止toWrite
,但它没有改变任何内容。我尝试将其转换为const char
指针,但也没有。
我觉得我错过了一个非常简单的细节。有人可以解释为什么我不能将这个char数组传递给gatt_write_attribute
函数吗?
答案 0 :(得分:0)
正如Ian Abbott和Chux在我原始问题的评论中所指出的那样,我确实很傻,并没有意识到我的调试器正在显示被指向为字符数组的东西数字。这就是导致错误值的原因。
我应该允许自己在工作时间之间多睡一会儿。
答案 1 :(得分:-1)
您需要将数组作为指针传递给第一个函数。否则它只会被复制到堆栈并且函数会写入新副本。垃圾可能在那里,因为它还没有被初始化。