【发布时间】:2020-12-19 02:21:44
【问题描述】:
我无法让我的程序显示整个 c 字符串,它只显示第一个字母!我正在尝试编写一个要求用户输入 2 个 c 字符串的函数。然后我有一个单独的函数来确定哪个 c-sting 按字母顺序更大,另一个要显示。每次它显示 c 字符串时,它只显示第一个字母。我无法弄清楚我做错了什么。我需要它来显示整个 c 字符串。
这是向用户询问两个 c 字符串的函数:
const char *getData(char *c, char *d)
{
cout << "Enter the first c-string: ";
cin.ignore();
cin.getline(c, 50);
cout << "Enter the second c-string: ";
cin.getline(d, 50);
return c, d;
}
这是比较 c 字符串的函数
const char findBigger(char *c, char *d)
{
if (strcmp(c, d) == 0)
return *c;
else if (strcmp(c, d) < 0)
return *c;
else if (strcmp(c, d) > 0)
return *d;
}
这里是显示输入和更大的 c 字符串的函数
void displayBigger(const char *c, const char *d, const char *maxChar)
{
cout << "The first c-string is " << c << endl;
cout << "The second char is " << d << endl;
cout << "The bigger value is " << maxChar << endl;
cout << "__________________________________________" << endl;
}
在main()我有
char first[50],
second[50]'
maxArray[50];
getData(first, second);
*maxArray = findBigger(first, second);
displayBigger(*first, *second, *maxArray);
程序的输出是:
Enter the first c-string: apple pie
Enter the second c-string: peach pie
The first char is a
The second char is p
The bigger value is a
__________________________________________
如何让它打印整个 c 字符串?它应该显示“苹果派”和“桃派”
【问题讨论】:
-
*maxArray=不会像您认为的那样做。它不会将整个数组复制到另一个数组。如果您尝试实际使用 C++std::strings,那么这些都不是必需的。要真正做你想做的事,只需用std::strings 替换所有导致缓冲区溢出和内存损坏的产生地,也就是“数组”,并相应地调整代码。 -
return c, d;-- 这并不像你想象的那样。 -
在
findBigger中,您使用相同的参数分别调用strcmp3 次。您只需要一次调用并保存返回值。 -
@SamVarshavchik 我希望我可以使用
std::string,但我的老师不希望我们使用它。 -
return c, d;返回d。它太复杂了,无法解释为什么会这样(与逗号运算符有关)。无需返回任何内容,只需将getData函数声明为返回void,而不是const char *。
标签: c++ string c-strings strcmp