Я пишу программу для домашнего задания и не могу понять, что я делаю неправильно. Программа берет некоторый текстовый ввод и выводит его на латинском языке, и хотя теперь программа достигает этого, при завершении программы происходит повреждение стека, при этом VS упоминает «Ошибка проверки времени выполнения # 2 - стек вокруг переменной« token »был поврежден. "
Я подозреваю, что это происходит из-за того, что каким-то образом пересекает границы указателя, но в настоящий момент я не совсем понимаю указатели, поэтому большинство вещей, которые я нашел, на самом деле не имеют смысла, и я пытаюсь понять, а не просто исправить то, что я сделал не так.
Прикреплена функция, использующая переменную, которая вызывает все проблемы (отредактирована для включения полной программы, потому что я понял, что некоторые важные биты были опущены).
int main(void)
{
char text[] = "";
char seps[] = " \t\n";
char *token = NULL;
char *next_token = NULL;
bool cont = true;
bool valid = false;
char contResp;
cout << "Enter a sentence to be translated: ";
do
{
cin.getline(text, 200);
cout << endl << text << endl;
token = strtok_s(text, seps, &next_token);
while (token != NULL)
{
if (token != NULL)
{
printLatinWord(token);
token = strtok_s(NULL, seps, &next_token);
}
}
cout << endl << endl << "Do you want to enter another sentence (y/n)? ";
valid = false;
while (!valid)
{
cin >> contResp;
contResp = tolower(contResp);
if (contResp == 'y')
{
valid = true;
cin.ignore();
cout << "Enter a sentence to be translated: ";
}
else if (contResp == 'n')
{
valid = true;
cont = false;
}
else
{
cout << "Invalid response. Please try again.";
cout << endl << endl << "Do you want to enter another sentence (y/n)? ";
}
}
}
while (cont);
system("pause");
return 0;
}
void printLatinWord(char *token)
{
string text = "";
char *first = token;
token++;
while (*token != '\0')
{
text += *token;
token++;
}
text += *first;
text += "ay ";
cout << text;
}
Я не уверен, как решить эту проблему, но если бы я мог получить некоторую помощь, а также простое объяснение того, что я сделал неправильно, я был бы очень признателен, так как арифметика с указателями в основном для меня бессмысленна.
Заранее спасибо!