为什么我的字符串说(null)?

时间:2014-08-24 05:22:14

标签: c++ string

我正在尝试根据条件设置文件名,但它不起作用。它一直说(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);
}

1 个答案:

答案 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