我正在尝试编辑一个arduino库,它是
"scripts": {
"start": "node app.js"
}
我试过
int hour() { // the hour now
return hour(now());
}
但是它返回了烦人的结果,我不知道如何用C ++编程,如果数字低于10,我只需要打印一个“0”。谢谢,Heitor。
答案 0 :(得分:0)
你不会说出令人讨厌的结果,但根据你所展示的内容,我会采取行动,并说你得到一个与小时()中不匹配的返回类型相关的编译错误,或者你正在访问无效的内存。
如果您希望hour()函数返回0前缀数字,则需要更改返回类型。但是,将其更改为char *会看到您返回指向堆栈上分配的内存的指针。内存一旦返回就会失效。
您需要做的是在调用hour()的代码中留出内存缓冲区,而不是在hour()本身。然后将它传递给hour(),以及缓冲区的大小。
您的主叫代码如下所示:
char s[25]; // 25 still seems excessive, I suggest 3, so you can fit two digits plus zero termination.
hour( s, 25 );
并且你的hour()函数将是:
void hour( char* pBuffer, size_t size ) {
snprintf( pBuffer, size, "%02d", hour( now() ) );
}
答案 1 :(得分:0)
如果你想在每次使用这样的东西时不必分配数据就返回结果。
注意:这仅适用于值-99到999
typedef union
{
char str[4];
int i;
} CharInt;
CharInt hour()
{
CharInt ci = {0};
sprintf(ci.str,"%02d", hour(now()));
return ci;
}
int main()
{
printf("%s", hour().str);
}
答案 2 :(得分:0)
正如大家提到的那样,你的问题很模糊。但是从你的标题和内容来看,我想我可以帮助你。
我认为你需要打印一个小于0
的每个数字(小时)前面的10
。即如果小时为1,则打印01
等。
如果那就是你需要的那么你在草图中犯了一些错误。首先,你从函数char
返回一个int
数组。然后需要hour(now())
而不是hour(now)
。
char * hour() { // the hour now
static char s[25]; //might be 5 is enough and more
sprintf(s,"%02d", hour(now()));
return s;
}
PS:由于返回类型是char数组,如果你将它存储在调用者的整数变量中,就像说int hr = hour();
一样,现在就不可能了。所以你需要直接打印它为{{1 }}
答案 3 :(得分:0)
由于s是hour()函数的本地,当你返回它时,它超出了范围而不再存在。因此处理器可以用其他东西自由覆盖它。当调用者尝试访问数组时,它会获取通过它写入的内容,而不是它在该函数中的内容。您永远不应该尝试从函数返回指向局部变量的指针。