C++ printf("%s" , string) 给了我非常奇怪的输出[重复]

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

我正在尝试使用 printf 为我的字符串添加颜色,例如

printf("\x1B[92m%d\033[0m", value1);

这对我来说对整数没有问题,但是当我尝试做类似的事情时

printf("\x1B[92m%s\033[0m", wantedString);

我得到一些随机的东西,比如,(°√,有什么帮助吗?

这是整个功能

void searchFileFor(path const& files, string wantedString) {
    
    ifstream inFile;
    string currentString;
    int lineNumber = 0;
    bool foundNothing = true;

    for (auto file : recursive_directory_iterator(files)) {
        lineNumber = 0; // Reset after each new file
        inFile.open(file);
        while (inFile >> currentString) {
            lineNumber++;
            if (currentString.find(wantedString) != string::npos) {
                cout << file << " " << wantedString << " " << lineNumber << '\n';
                foundNothing = false;
            }
            //cout << file << " " <<  currentString << endl;
        }
        inFile.close();
    }
    if (foundNothing == true) {
        cout << "We were not able to find: " << wantedString << "";
        printf("\x1B[92m%s\033[0m", wantedString);
    }
    //cout << "Wanted String: " << wantedString;
}
c++ string file printf
2个回答
5
投票

对于

printf
,你需要一个 C 风格的字符串。使用
wantedString.c_str()


2
投票

Printf()
是一个 C 函数,只能由 C++ 访问以实现旧代码兼容性。但不建议在C++中使用。

您遇到的问题是您正在向其传递一个

string
对象,这是
printf()
无法打印的东西。从
string
C++ 对象到
char *
指针没有关系。

但是你很幸运。

string
(
string::c_str()
) 中有一个方法可以使用,如

 printf("\x1B[92m%s\033[0m", wantedString.c_str());

无论如何,最好(每个人都会推荐你)使用

<iostream>
C++包,它比
stdio
更丰富并且可扩展(你可以重载iostream方法来支持你自己的数据类型,但这是不可能的)与
printf()
和朋友们一起)

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