当使用cout API时,输出的字符混乱不堪。

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

我正试图在VS 2015中运行这段简单的代码。

#include "stdafx.h"
# include <iostream>

int main()
{
    char * szOldPath = "\"C:\icm\scripts\StartupSync\runall.bat\" nonprod"; 
    std::cout << szOldPath << std::endl;

    return 0;
}

然而,szOldPath的输出并不正确,控制台打印的是------。

unall.bat" nonprodupSync

我怀疑这可能是因为Unicode,我应该使用wcout。所以我通过进入配置属性-> General --> Character Set来禁用Unicode,并尝试将其设置为Not Set或Multi Byte。但还是会遇到这个问题。

我知道禁用UNICODE是不好的,但我正试图了解我们公司写的一些遗留代码,这个实验是这个练习的一部分,有什么方法可以让cout命令成功打印szOldPath?

c++ windows visual-studio winapi
1个回答
1
投票

你的问题与Unicode无关。

\r 你的问题与Unicode无关。逃逸序列 为回车。 所以,你打印出来的是 "C:\icm\scripts\StartupSync,然后 \r 告诉终端将光标移回当前行的开头,然后用 unall.bat" nonprod 被打印出来,覆盖原有的内容。

你需要将所有的 \ 字符,就像你必须转义字符串中的 " 字符。

另外,你的变量需要被声明为一个指向 const char 当给指针赋值一个字符串文字时。 这在C++11及以后的版本中被强制执行。

#include "stdafx.h"
#include <iostream>

int main()
{
    const char * szOldPath = "\"C:\\icm\\scripts\\StartupSync\\runall.bat\" nonprod"; 
    std::cout << szOldPath << std::endl;

    return 0;
}

或者,在C++11和更高版本中,你可以使用一个叫做 原字符串文字 而不是为了避免逃避任何带有前导的字符。\:

const char * szOldPath = R"("C:\icm\scripts\StartupSync\runall.bat" nonprod)"; 
© www.soinside.com 2019 - 2024. All rights reserved.