c++ - 围绕变量“名称”的堆栈已损坏 C++
问题描述
我正在尝试使用 CStrings 在 C++ 中执行其他任务,例如从提供的名称中删除所有元音。但是,我似乎无法弄清楚为什么会出现此错误:
变量“名称”周围的堆栈已损坏。
为什么会这样?
这是代码:
#include <iostream>
#include <iomanip>
#include <cstring>
#include <string>
using namespace std;
void cStringDemo();
void stringDemo();
void removeCVowels(char myGuess[50]);
int main() {
cStringDemo();
cin.get();
cin.ignore();
}
void cStringDemo() {
char name[] = "Seth Smith";
char guess[50];
cout << "Guess my name! [First and Last, EX: Bobby Hall.]" << endl;
cin.get(guess, 20);
if (strcmp(name, guess) == 0) {
cout << "Correct!" << endl;
}
else {
cout << "Incorrect!" << endl;
}
cout << "You guessed " << guess << "." << endl;
removeCVowels(guess);
}
void removeCVowels(char myGuess[50]) {
char nameNoVowel[50];
strcpy_s(myGuess, 100, nameNoVowel);
for (int x = 0; x < 50; x++) {
if (nameNoVowel[x] == 'a' || nameNoVowel[x] == 'e' || nameNoVowel[x] == 'i' || nameNoVowel[x] == 'o' || nameNoVowel[x] == 'u' || nameNoVowel[x] == 'A' || nameNoVowel[x] == 'E' ||
nameNoVowel[x] == 'I' || nameNoVowel[x] == 'O' || nameNoVowel[x] == 'U')
{
nameNoVowel[x] = ' ';
}
}
}
解决方案
这是未定义的行为:
void removeCVowels(char myGuess[50]) {
char nameNoVowel[50];
strcpy_s(myGuess, 100, nameNoVowel);
您正在从未初始化复制nameNoVowel
到myGuess
. 您应该交换strcpy_s
. 此外,即使交换 的两个参数strcpy_s
,100 的限制也太大了,因为 nameNoVowel 只有 50 个字符。尝试:
void removeCVowels(char myGuess[50]) {
char nameNoVowel[50];
strcpy_s(nameNoVowel, sizeof(nameNoVowel)-1, myGuess);
推荐阅读
- r - 如何使用R获取大写特定单词后的字符串内容?
- asp.net - System.Web.Services.Protocols.SoapException:
尚未正确初始化 - c# - Xamarin.Forms:StackLayout 中的位置标签?
- java - 如何以流模式读取非常大的 JSON 文件?
- java - Ibatis 结果图不适用于内部类
- youtube - Youtube 数据配额是限制为 10k 单位/天/应用程序,还是 10k 单位/天/用户?
- javascript - Jest 中的 Mock shell 命令输出
- python - 自定义模型字段在哪里转换为它们的 db_type?
- wpf - 鼠标移动失控时禁用按钮
- python - 在 matplotlib 中为散点图提供旋转的更快方法?