C++ 如何固定gcc-墙“;嵌入式'\0';格式为“;警告
这可能不是很关键,但是我正在尝试修复g++所抱怨的所有警告。在下面的代码中,我得到了snprintf()行的“嵌入\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()); 提前感谢…警告的出现有一个很好的理由:
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”)?为什么字符串中有空字符?另外,由于可变长度数组(
null
,可以不带文件名。稍后,我使用filePath作为fopen()
的第一个参数。我认为应该提到它,而snprintf
保证将nul放在它写入的缓冲区的末尾。所以这里有两个NUL。这可能不是目的。