我想将本地时间保存到char变量。这是我用过的代码。但它是在说
“无法将char *转换为char”
这是我的代码:
#include <stdio.h>
#include <time.h>
struct tme
{
char intime;
}e;
void main( )
{
char timeStr [9];
_strtime( timeStr );
e.intime=timeStr;
printf( "The current time is %s \n", timeStr);
}
提前完成。
答案 0 :(得分:0)
这很简单,你有一个长度为timeStr
的char数组9
并尝试将其分配给char intime
。有类型不兼容。可以认为它是char[]
永远不等于char
。
您可以按照以下方式解决此问题(但我不知道您想要实现的目标):
struct tme
{
char* intime;
}e;
PS :MSDN声明(_strtime):
//注意:_strtime已弃用;考虑使用_strtime_s代替
答案 1 :(得分:0)
e.intime=timeStr;
timeStr
的类型为char [9]
。它在赋值期间或在用作参数的函数调用中衰减到指向第一个元素的指针。
e.intime
的类型为char
。 char
和char*
不兼容,编译器也在抱怨你。相反,你可以做 -
struct tme
{
char intime[10]; // +1 for the termination character to play safe
}e;
现在,strcpy可用于将时间复制到成员变量。
strcpy(e.intime, timeStr);
如果是C ++,请使用 std :: string 而不是原始数组。
答案 2 :(得分:0)
精炼的某些阶段:
第1阶段:修复您的代码。
struct tme {
char * intime; // You had a type mismatch
} e;
int main () { // Don't use void main()
char timeStr [9];
_strtime( timeStr );
e.intime=timeStr;
printf( "The current time is %s \n", timeStr);
}
这里有一个问题:你的struct tme
依靠外部世界为它做所有事情,并且正确地做到了。如果我们想在main中重用timeStr
怎么办?如果您在main
以外的函数中使用此结构并将e.intime
设置为超出范围的变量,该怎么办?
细化:struct tme
应该拥有时间缓冲区。
struct tme {
char intime[9]; // Put the buffer here, not in main.
} e;
int main () {
_strtime( e.intime );
printf( "The current time is %s \n", e.intime);
}
我们这里仍有问题。任何人都可以修改缓冲区,结构只是一个被动的容器。
细化:隐藏数据并使对象处于活动状态。
struct tme {
const char * set_time () { _strtime (intime); return intime; }
const char * get_time () const { return intime; }
private:
char intime[9];
};
int main () {
printf( "The current time is %s \n", e.set_time());
}