将参数传递给另一个 .c 文件

Passing arguments to another .c file

如果其他人发布了相同的问题,但我没有找到适合我的答案,我已经四处寻找了好一阵子。

这是我的问题: 当我将 3 个参数(位于 main 中)传递给另一个 .c 文件时,信息将被删除。如果我将函数保留在 main 中(不将参数传递给另一个 .c 文件),程序就可以正常工作。

我在这里错过了什么?

此外,我正在使用微控制器,但我确定问题出在我的代码中。

主要内容:

#include <avr/io.h>
#include <stdbool.h>
#include <stdio.h>

#include "glcd.h"
#include "fonts/Liberation_Sans15x21_Numbers.h"


//functions used:
void glcd_print_clock(void);
void time_clock(void);
void display_clock_text(uint8_t x, uint8_t y, uint8_t z);


int main(void)
{
    glcd_init();

    while(1)
    {
        time_clock();
    }

}

//
void time_clock(void)
{
    uint8_t sec, min, hr;
    //char str_time[8] = "";

    for(hr=1; hr<13; hr++)
    {
        for(min=0; min<60; min++)
        {
            for(sec=0; sec<60; sec++)
            {

                display_clock_text(hr,min,sec);

                /*
                //clears buffer
                glcd_clear_buffer();
                glcd_set_font(Liberation_Sans15x21_Numbers,15,21,46,57);
                //sends hr, min, and sec to string
                sprintf(str_time,"%02d:%02d:%02d",hr,min,sec);
                //x-y coordinate of text
                glcd_draw_string_xy(12,5,str_time);
                //displays text
                glcd_write();
                _delay_ms(1000);
                */

            }
        }
    }
}

其他 .c 文件 (display_text):

#include "glcd.h"
#include "fonts/Liberation_Sans15x21_Numbers.h"
#include <stdio.h>

#define Y_AXIS  5
#define X_AXIS  12

void display_clock_text(uint8_t x, uint8_t y, uint8_t z);


/*  Gets the hour, minutes and seconds from main.
    Then displays the information on the LCD
*/
void display_clock_text(uint8_t x, uint8_t y, uint8_t z)
{
    char str_time[8] = "";

    //clears buffer
    glcd_clear_buffer();

    //selects font to be used
    glcd_set_font(Liberation_Sans15x21_Numbers,15,21,46,57);

    //sends hr, min, and sec to string
    sprintf(str_time,"%02d:%02d:%02d", x, y, z);

    //x-y coordinate of text
    glcd_draw_string_xy(X_AXIS,Y_AXIS,str_time);

    //displays text
    glcd_write();

    _delay_ms(1000);
}

char str_time[8] = "";不正确。应该是char str_time[9] = "";。这是因为 sprintf(str_time,"%02d:%02d:%02d", x, y, z); 由于终止符 0 需要 9 个字节。

此外,一般来说,一个好主意是:

snprintf(str_time, sizeof(str_time), "%02d:%02d:%02d", x, y, z);

这可能会或可能不会导致您遇到的不良行为,但肯定需要修复。