C++ 如何固定gcc-墙“;嵌入式'\0';格式为“;警告

C++ 如何固定gcc-墙“;嵌入式'\0';格式为“;警告,c++,gcc,g++,warnings,C++,Gcc,G++,Warnings,这可能不是很关键,但是我正在尝试修复g++所抱怨的所有警告。在下面的代码中,我得到了snprintf()行的“嵌入\0格式”警告 我怎样才能解决这个问题 int filePathSize = path.size() + s.size() + 1; char filePath[filePathSize]; snprintf(filePath,filePathSize,"%s%s\0",path.c_str(),s.c_str()); 提前感谢…警告的出现有一个很好的理由:

这可能不是很关键,但是我正在尝试修复g++所抱怨的所有警告。在下面的代码中,我得到了snprintf()行的“嵌入\0格式”警告

我怎样才能解决这个问题

    int filePathSize = path.size() + s.size() + 1;
    char filePath[filePathSize];
    snprintf(filePath,filePathSize,"%s%s\0",path.c_str(),s.c_str());

提前感谢…

警告的出现有一个很好的理由:
snprintf
会认为
\0
标志着字符串的结束。如果您确实需要打印空值,则不能将其直接嵌入字符串中;由于这个原因,C字符串不能包含空字符。这是最明显的解决办法:

snprintf(filePath,filePathSize,"%s%s%c",path.c_str(),s.c_str(),'\0');

您是否尝试过删除它(即改用“%s%s”)?为什么字符串中有空字符?另外,由于可变长度数组( FielPATH[文件大小] ),您的代码无效C++。它只是编译,因为G++在C++中实现VLAs作为扩展。我试图根据从特定目录中读取的数据动态创建文件名。如果我要在文件名的末尾包含一个
null
,可以不带文件名。稍后,我使用filePath作为
fopen()
的第一个参数。我认为应该提到它,而
snprintf
保证将nul放在它写入的缓冲区的末尾。所以这里有两个NUL。这可能不是目的。