簡體   English   中英

使用 sprintf 時初始化程序無效

[英]Invalid initializer when using sprintf

當我使用以下代碼時:

        ...

        time_t timer;
        struct tm* tm_info;
        char day[3];
        char month[3];
        char year[5];

        time(&timer);
        tm_info = localtime(&timer);

        strftime(day, 3, "%d", tm_info);
        strftime(month, 3, "%m", tm_info);
        strftime(year, 5, "%Y", tm_info);

char error_string_end[] = sprintf("Year: %s\n", year);

        ...

我收到以下錯誤:

my_file.c:15:27: error: invalid initializer
 15 | char string_end[] = sprintf("Year: %s\n", year);
    |                           ^~~~~~~

我對C真的很陌生,我已經直接嘗試過printf ,但是出現同樣的錯誤。

我想要做的是,我試圖通過一些變量首先將當前年份打印到屏幕上。 所以,這就是我使用sprintf的原因。

您似乎期望可以在 C 中分配一個字符串。 這不可以。
您似乎還期望sprintf()返回一個字符串。 它不是。
這一點,以及實際發生的事情之間的沖突,是編譯器試圖告訴你的。 您不能使用sprintf()返回的內容初始化 char 數組。

請閱讀您使用的函數的文檔,例如https://en.cppreference.com/w/c/io/fprintf

如果要將字符串寫入char數組,這基本上是可能的,您需要將其用作sprintf()的參數,根據

int sprintf( char *buffer, const char *format, ... );

例如

int myInt=0;
myInt =sprintf( error_string_end, "Year: %s\n", year);

那么您將在myInt中找到打印的字符數。

為此,您當然需要確保目標緩沖區足夠大。
也許像:

char error_string_end[100];

在行前。

然而,使用snprintf()是一種更方便的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM