我有一个C++函数createFolder(注释前的符号是为了在vscode中更好的注释插件):
void createFolder(const char *dir, const char *foldername)
{
// ! Checking to see if the folder already exists
if (hasFolder(dir, foldername))
return;
// ? Full directory
char buffer[sizeof(dir) + sizeof(foldername) - 2];
strncpy(buffer, dir, sizeof(buffer));
strncpy(buffer, foldername, sizeof(buffer));
// ? Creating folder
int success = mkdir(buffer);
// ! Checking to see if folder creation worked
if (success == -1)
std::cerr << "Error: " << strerror(errno) << "\n";
}
出于某种原因,如果我尝试创建一个名称长度超过 6 个字符的文件夹,它会在末尾添加这个奇怪的位
st.t12ÀÌ6u
这是我用来测试的代码:
int main(int argc, char *argv[])
{
// This will work fine
createFolder("./", "123456");
// This adds the weird "st.t12ÀÌ6u" part
createFolder("./", "1234567");
return 0;
}
我怀疑它与代码的
char buffer[]
部分有什么关系,因为我已经单独测试过它并且它工作得很好。
Igor Tandetnik 建议使用
std::string
而不是 const char *
。这似乎有效。