如果< 10然后02不是2 !!!帮助C ++(Arduino库)

时间:2017-05-10 02:49:04

标签: c++ arduino formatting

我正在尝试编辑一个arduino库,它是

"scripts": {
  "start": "node app.js"
}

我试过

int hour() { // the hour now 
  return hour(now()); 
}

但是它返回了烦人的结果,我不知道如何用C ++编程,如果数字低于10,我只需要打印一个“0”。谢谢,Heitor。

4 个答案:

答案 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()函数的本地,当你返回它时,它超出了范围而不再存在。因此处理器可以用其他东西自由覆盖它。当调用者尝试访问数组时,它会获取通过它写入的内容,而不是它在该函数中的内容。您永远不应该尝试从函数返回指向局部变量的指针。