使用 *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
。您正在使用 printf
和 printf
不知道任何 (std::string
) 的参数,因此您的程序正在调用未定义的行为。
解决方法是使用 printf
知道的类型。由于 std::string
有一个 c_str()
函数,returns 一个 const char *
,请改用它。
所以不要像这样的行:
printf("s: %s\n",s);
这样做:
printf("s: %s\n",s.c_str());
我正在尝试将 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
。您正在使用 printf
和 printf
不知道任何 (std::string
) 的参数,因此您的程序正在调用未定义的行为。
解决方法是使用 printf
知道的类型。由于 std::string
有一个 c_str()
函数,returns 一个 const char *
,请改用它。
所以不要像这样的行:
printf("s: %s\n",s);
这样做:
printf("s: %s\n",s.c_str());