[英]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.