文件夹创建后命名不正确

问题描述 投票:0回答:1

我有一个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[]
部分有什么关系,因为我已经单独测试过它并且它工作得很好。

c++ function directory naming
1个回答
0
投票

Igor Tandetnik 建议使用

std::string
而不是
const char *
。这似乎有效。

© www.soinside.com 2019 - 2024. All rights reserved.