我正在尝试根据条件设置文件名,但它不起作用。它一直说(null)。
void main()
{
int cond = 1;
char * filename;
// C:\other\path\here\
filename = "C:\\other\\path\\here";
if (cond)
// C:\some\path\here\
filename = "C:\\some\\path\\here";
printf("%s", filename);
}
答案 0 :(得分:4)
从标准,
§2.1.2 [lex.phases]
新行字符的每个实例和紧接在前的字符 删除反斜杠字符,拼接物理源代码行 逻辑源代码行。
所以
// C:\other\path\here\
filename = "C:\\other\\path\\here";
变为
// C:\other\path\here\filename = "C:\\other\\path\\here";
同样地
// C:\some\path\here\
filename = "C:\\some\\path\\here";
变为
// C:\some\path\here\filename = "C:\\some\\path\\here";
因此文件名永远不会被初始化。
MS C ++编译器发出警告。
(6):警告C4010:单行注释包含行继续符
(9):警告C4010:单行注释包含行继续符
预处理后,这将是代码,我认为
void main()
{
int cond = 1;
char * filename;
if (cond)
printf("%s", filename);
}
实际上,在上面的程序filename
中可以有任何值,不一定是null。所以你的程序可以打印任何东西,崩溃,等等。你可能正在编译debug&你的编译器null在调试模式下初始化单位化指针&因此你得到null
视为:main
始终为int main
而不是void main