如何修复gcc -Wall"嵌入'\ 0'格式"警告

fni*_*isi 7 c++ gcc warnings g++

这可能不是非常关键,但我试图解决g ++抱怨的所有警告.在下面的代码中,我得到"嵌入'\ 0'格式"警告snprintf()行.

我怎样才能解决这个问题?

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

提前致谢...

Bri*_*ian 13

这个警告是有充分理由的:snprintf它会将\0标记视为字符串的结尾.如果您确实需要打印null,则无法将其直接嵌入到字符串中; 由于这个原因,C字符串不能包含空字符.这是最明显的解决方法:

snprintf(filePath,filePathSize,"%s%s%c",path.c_str(),s.c_str(),'\0');
Run Code Online (Sandbox Code Playgroud)

  • 我认为应该提到,比`snprintf`保证将nul放在它写入的缓冲区的末尾.所以这给了2个人.这可能不是意图. (3认同)