使用 *argv[] 的异常输出

Unusual output using *argv[]

我正在尝试将 argv[] 的字符串元素打印到控制台,但无论出于何种原因,我得到的输出都是无意义的。我的测试回文的程序似乎运行正常。唯一关闭的部分是当我尝试将元素 int argv[] 输出到我刚刚测试为回文的控制台时。

这是我处理这个问题的代码:

for (int i = 1; i < argc; i++) {
    string s(argv[i]);
    printf("s: %s\n",s);
    if (ignoreCase) {
        for (int j = 0; j < s.size(); j++) {
            tolower(s.at(j));
        }
    }
    if (ignoreSpaces) {
        s = removeSpaces(s);
    }
    if (isPalindrome(s, 0, s.size() - 1)) {
        printf("%s is a palindrome.\n",s);
    }
    else {
        printf("%s is not a palindrome.\n",s);
    }
}

这是我得到的输出:

既然你说你不能使用 cout,你就没有正确使用 printf。您正在使用 printfprintf 不知道任何 (std::string) 的参数,因此您的程序正在调用未定义的行为。

解决方法是使用 printf 知道的类型。由于 std::string 有一个 c_str() 函数,returns 一个 const char *,请改用它。

所以不要像这样的行:

printf("s: %s\n",s);

这样做:

printf("s: %s\n",s.c_str());