C++ 将 2 个字符串合并在一起

C++ Merge 2 Strings Together

我正在尝试创建一个简单的文本文件到桌面,但我在控制台中看到:“访问被拒绝。”。我从命令行做同样的事情,没有错误。如果我在哪里打印 path 我会得到: “

C:/Users/Alex (这里是一个新行) /Desktop/MyTextFile.txt

我知道当我通过 += string 将一个字符串添加到另一个字符串时,我在2 串。任何帮助将不胜感激!

string getClip() {
    HANDLE clip;
    string clip_text = "";
    if (OpenClipboard(NULL))
    {
        clip = GetClipboardData(CF_TEXT);
        clip_text = (char*)clip;
        CloseClipboard();
        return clip_text;
    }
}
string getUser() {
    system("echo %username% | clip");
    string user = getClip();
    return user;
}
void create_a_simple_txt_file() {
    string username = getUser();

    ostringstream path;
    path << "C:/Users/" << username << "/Desktop/MyTextFile.txt";
    system(("echo I successful Write something to my file > " + path.str()).c_str());

}

int main() {
    create_a_simple_txt_file();
    cin.get();
    return 0;
}

我敢打赌你的问题出在 getUser() 函数中,它返回带有尾随换行符的用户名,而不是字符串连接(顺便说一句,不添加 space ).

编辑问题后编辑:
如我所料,问题出在您的 getUser() 函数中,如果您在 Windows OS 上 运行,请参阅 "Some programmer dude" 回答错误原因和可能的解决方案.

另一个问题可能是您正在尝试访问另一个用户的桌面文件夹,而该用户运行您的程序没有权限。

另一个建议:您可能希望使用适当的 C++ 函数或 fstream 来写入文件,而不是使用 system()

问题是 systemecho 命令的用法:

system("echo %username% | clip");

echo 命令 添加 尾随换行符,使用 clip 命令将其复制到剪贴板,然后您将获得完整的字符串,包括getClip.

的换行符

您可以完全不使用 system 来解决这个问题,而是使用 GetUserName Windows API 函数获取用户名:

std::string getUser()
{
    char username[64];

    // Use the ASCII version of the function
    if (GetUserNameA(username, sizeof username))
    {
        return username;
    }

    // An error
    std::cerr << "Error getting username: " << GetLastError() << '\n';
    return "";
}

您收到 访问被拒绝 错误,因为您正在处理垃圾数据。行

system(("echo I successful Write something to my file > " + path.str()).c_str());

创建一个临时字符串并获取指向其底层字符数组的指针。但是在执行 system() 调用之前,临时字符串被破坏并且指针变得无效。

如果您用 cout 替换您的系统调用,您可以看到您实际尝试执行的命令。对我来说,它类似于 Ó╣iwµ,它既不是有效命令也不是有效目录名。因此,访问被拒绝

要解决该问题,请将临时字符串分配给一个变量,直到您使用它为止:

string s = ("echo I successful Write something to my file > " + path.str());
system(s.c_str());