在阅读从http://www.almostinfinite.com/memtrack.html
链接的memTrack库后,我有一个问题可以将__FILE__
保存在类型为const char*
永久 的变量中,而不需要使用strdup()
吗? BlockHeader::Stamp
使用strdup()
来分配__FILE__
字符串吗?
void BlockHeader::Stamp(char const *filename, int lineNum, char const *typeName)
{
myFilename = filename; // don't use strdup(filename) to assign?
myLineNum = lineNum;
myTypeName = typeName;
}
举一个例子继续描述我的问题:
//testFILE.cpp
#include <iostream>
const char* getStr()
{
return __FILE__;
}
void Print()
{
std::cout << __FILE__ << std::endl;
}
int main()
{
std::cout << getStr() << std::endl;
Print();
return 0;
}
经过测试,二进制testFILE可以打印两行“testFILE.cpp”。这只是巧合吗?
答案 0 :(得分:10)
__FILE__
在预处理时扩展为字符串文字。如果你把
const char* getStr()
{
return __FILE__;
}
在testFILE.cpp
中,然后它就像你写的那样
const char* getStr()
{
return "testFILE.cpp";
}
和适用于所有字符串文字的相同规则也适用于扩展__FILE__
的结果的字符串文字:它们指向的字符串存在于整个应用程序运行中。
答案 1 :(得分:5)
__FILE__
扩展为字符串文字。您可以在类型为char const*
的变量中存储指向字符串文字(的第一个字符)的指针。文字的生命周期与程序执行相同。
答案 2 :(得分:0)
谢谢大家。我知道了。
C / C ++中的字符串文字保存在静态数据段中,因此文字的生命周期与程序执行相同。
我对字符串文字与局部变量感到困惑。
再次感谢。