C 使用sprintf时初始值设定项无效
当我使用以下代码时:C 使用sprintf时初始值设定项无效,c,date,printf,C,Date,Printf,当我使用以下代码时: ... 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",
...
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
数组(这基本上是可能的),则需要将其用作sprintf()的参数,根据
int sprintf( char *buffer, const char *format, ... );
例如
然后您将在myInt
中找到打印字符数
为此,您当然需要确保目标缓冲区足够大。也许像:
char error_string_end[100];
在前面的队伍里
但是,使用
snprintf()
是一种更方便的方法。您似乎希望字符串可以在C中赋值。它不能。您似乎还希望
sprintf()
返回一个字符串。它没有。这就是编译器试图告诉您的,以及实际发生的事情之间的冲突。不能使用
sprintf()
返回的内容初始化字符数组
请阅读您使用的功能文档,例如
如果您想将字符串写入char
数组(这基本上是可能的),则需要将其用作sprintf()的参数,根据
int sprintf( char *buffer, const char *format, ... );
例如
然后您将在myInt
中找到打印字符数
为此,您当然需要确保目标缓冲区足够大。也许像:
char error_string_end[100];
在前面的队伍里
但是,使用
snprintf()
是一种更方便的方法。您是否阅读了sprintf
的文档,特别是关于函数返回的内容?您应该参考sprintf
的文档。您没有正确使用它。值得注意的是,数组初始值设定项看起来像{…}
(和“…”
),而不是函数调用。您是否阅读了sprintf
的文档,特别是关于函数返回的内容?您应该查阅sprintf
的文档。您没有正确使用它。值得注意的是,数组初始值设定项看起来像{…}
(和“…”
),而不是函数调用。然后声明/定义它或忽略返回值。我相应地延长了我的答案。去睡觉,睡觉。Return将于明天休息并阅读sprintf()的使用。也许除了文档之外还有教程。做一个好程序员的一部分就是知道什么时候睡觉。这甚至不是一个容易的部分。我很高兴以这种不同寻常的方式帮助你玩得开心。然后声明/定义它或忽略返回值。我相应地延长了我的答案。去睡觉,睡觉。Return将于明天休息并阅读sprintf()的使用。也许除了文档之外还有教程。做一个好程序员的一部分就是知道什么时候睡觉。这甚至不是一个容易的部分。我很高兴以这种不同寻常的方式帮助你玩得高兴