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

时间:2017-03-14 13:34:46

标签: c++ string access-denied

我正在尝试创建一个简单的文本文件到桌面,但我进入控制台:“访问被拒绝。”。我从Comand Line做同样的事情并没有错误。如果我在哪里打印路径,我会得到: “

C:/用户/亚历克斯 (这是一个新行) /Desktop/MyTextFile.txt

我知道当我通过 + = string 将字符串添加到另一个字符串时,我在两个字符串之间得到一个空格。任何帮助都是合情合理的!

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;
}

3 个答案:

答案 0 :(得分:3)

问题是使用systemecho命令:

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

echo命令添加一个尾随换行符,使用clip命令将其复制到剪贴板中,然后使用{{获取包含换行符的完整字符串1}}。

您可以通过完全不使用getClip来解决此问题,而是使用GetUserName Windows API函数获取用户名:

system

答案 1 :(得分:1)

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

在编辑问题后编辑:
正如我想的那样,问题在于你的getUser()函数,如果你在Windows操作系统上运行,请参阅“一些程序员老兄”回答它为什么是错误的以及可能的解决方案。

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

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

答案 2 :(得分:1)

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

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());