Я в основном пытаюсь сохранить все после определенного индекса в массиве.Сбой кода. Попытка удалить символы из массива char C
Например, я хочу сохранить имя, которое объявлено как char name[10]
. Если пользователь вводит в словах 15
символов, он будет игнорировать первые пять символов и сохранить остальное в массиве символов, однако моя программа выйдет из строя.
Это мой код
char name[10];
cout<< "Starting position:" << endl;
cin >> startPos;
for(int i= startPos; i< startPos+10; i++)
{
cout << i << endl; // THIS WORKS
cout << i-startPos << endl; // THIS WORKS
name[i-startPos] = name[i]; // THIS CRASHES
}
Например, если мое имя было McStevesonse
, я хочу, чтобы программа просто хранить все, начиная от 3-й позиции, так что конечный результат Stevesonse
Я бы на самом деле оцените, если кто-то может помочь мне исправить этот крах.
Благодаря
Если 'name' объявлено как' name [10] 'и' startPos> 0', то 'i' будет больше, чем 10, и поэтому 'name [i]' будет работать за пределами выделенного пространства. Код, который вы опубликовали, не очень ясен в этом контексте, поскольку вы описываете половину его словами, а не кодом. – Misch
Как вы сохраняете 15 символов ввода пользователя в переменной 'char name [10]'? Когда вы знаете ответ на этот вопрос, вы поймете, в чем проблема. К сожалению, эта часть вашей программы не в вашем вопросе, поэтому я не могу ответить на этот вопрос. Тем не менее, я могу сказать вам, что невозможно хранить 15 символов в массиве из 10 'char', не вызывая «неопределенного поведения», что часто приводит к сбоям позже. –
Код, который вы предоставили, похоже, не относится к заданному вами вопросу. 'Если пользователь вводит в себя 15 символов ...'; Я не вижу, чтобы ваша программа запрашивала имя пользователя в любом месте. Пожалуйста, перефразируйте свой вопрос и/или включите [MCVE] (http://stackoverflow.com/help/mcve). – Julian