【问题标题】:C++ printf("%s" , string) is giving me very strange outputC++ printf("%s" , string) 给了我非常奇怪的输出
【发布时间】:2022-01-12 19:09:37
【问题描述】:

我正在尝试使用 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;
}

【问题讨论】:

  • wantedString 中有什么内容?
  • 您可能需要wantedString.c_str()printf() 没有 std::string 的概念。
  • 不要使用 printf:std::cout &lt;&lt; "\x1B[92m" &lt;&lt; wantedString &lt;&lt; "\033[0m"
  • 启用compiler warnings 应该会提醒您注意该问题。
  • 您为什么同时使用\x1B\033?你喜欢折磨维护者吗?

标签: c++ string file printf


【解决方案1】:

Printf() 是一个 C 函数,仅可用于 C++ 以与旧代码兼容。但不建议在C++中使用。

您遇到的问题是您将string 对象传递给它,这是printf() 无法打印的东西。 string C++ 对象与 char * 指针之间没有任何关系。

但是你很幸运。 string (string::c_str()) 中有一个方法可以使用,如

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

【讨论】:

    【解决方案2】:

    对于printf,您需要一个 c 样式的字符串。使用wantedString.c_str()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多