【发布时间】:2014-03-26 17:37:11
【问题描述】:
我创建了一个Date 类,我正在尝试创建一个转换方法,以便您可以将Date 对象转换为const char*“字符串”。必须是const char*,不是 string。
但是,我发现了一些我无法解决的问题。
这是我的方法:
Date::operator char*() const {
tm date = { 0, 0, 0, day_, month_ - 1, year_ - 1900, 0, 0, -1 };
mktime(&date);
char* weekday[] = { "sunday", ..., "saturday" };
char* month[] = { "january", ..., "diciembre" };
char string[50];
sprintf(string, "%s %d / %s / %d", weekday[fch.tm_wday], day_, month[fch.tm_mon], year_);
return string;
}
编译器说:
warning: address of local variable ‘cadena’ returned [-Wreturn-local-addr]
char string[50];
如果我为字符串变量添加static 标签,它将被共享,我不希望这样。
我该怎么做?
【问题讨论】:
-
您已将您的问题标记为“c++”,而不是“c”。有什么特殊原因不想使用
std::string? -
是的,它必须是 const char*,而不是字符串。
-
您必须意识到
char const*不是字符串类型。它只是一个指针。你可以用指针做事——但是你需要定义一个内存管理的契约。一种方法可能是分配动态内存并将缓冲区返回给调用者;然后调用者将负责删除它。另一种方法是让调用者提供一个缓冲区供你填充。 -
您可以将
char string[50]从您的方法中移出并使其成为该类的私有成员...但是如果您修改该实例的日期,它的内容仍然可能会发生变化。为什么不能返回std::string并在之后从中获取const char *? -
我试图这样做。我尝试创建一个
char* string属性,然后在调用该方法时动态保留内存,但出现错误。所以我在方法中声明了一个局部变量,并在那里动态分配它。现在它起作用了。每个人都在提到string,这让我发疯。我不能用!!!我被要求不要。我知道只要有string,生活就会很精彩。
标签: c++ casting type-conversion