Arduino serial.print()在实际的char之后添加了一个额外的字符

时间:2010-12-24 22:50:48

标签: c string buffer arduino printf

        char *feedtime = "0:0";
        String interval = "6";

    char* convert(char* x, String y){

             int hour;
             int minute;


             sscanf(x, "%d:%d", &hour, &minute);

             char buf[5];

             if (y == "6"){

                 if (hour > 17){

                     hour = (hour+6)%24;

                     snprintf(buf, 5, "%d%s", hour, ":0");

                 }

                 if (hour < 18){

                   hour = hour + 6;
                   snprintf(buf, 5, "%d%s", hour, ":0\0");

                 }

             }

             buf [5] = '\0';
             return buf;
}

执行转换时(时间,间隔);

串行监视器返回正确的值,但会向其添加一个'或另一个符号。

任何想法为什么?

我从人们说的更新了我的代码,但是我仍然遇到同样的问题?

3 个答案:

答案 0 :(得分:3)

您正在返回指向堆栈变量的指针。这是错的。一旦函数退出,'buf'使用的堆栈空间是未定义的。

答案 1 :(得分:0)

缓冲区中需要额外的字符。您只有一个4个字符的数组,但是您需要5个字符(2个表示小时,2表示:0,1表示尾随0)。完成后,您还需要null终止字符串。

和jcopenha说的话。

答案 2 :(得分:0)

您的字符串没有正确的zerotminminated。增加buf的大小。