Я часами рвал свою программу, пытаясь найти программу. Я, наконец, ограничил это всего лишь парой строк кода, но все же я все еще глуп (или устал), чтобы найти проблему.
Все это функция копирования строк с использованием указателей. Кто-нибудь может это просмотреть?
void stringCopy(char *sourcePtr, char *destPtr)
{
while(*sourcePtr!='\0')
{
*destPtr=*sourcePtr;
destPtr++;
sourcePtr++;
}
}
Он вводит значения мусора в мои строки, как будто я каким-то образом выхожу за пределы строки.
Кроме того, он используется только для копирования строк длиной менее 10. Объявленные исходный и целевой массивы имеют размер 20. Все жестко запрограммировано.
Я бы использовал strcpy, но это назначение для класса, и это не разрешено.
РЕДАКТИРОВАТЬ: я просто забыл ввести окончательный нулевой символ в пункт назначения! Извините за все неприятности, ребята!
самый простой strcpyX()
функция:
void strcpyX(char *dest, const char *src){
while(*src) *dest++ = *src++;
*dest = '\0';
}
Помните, это сработает, только если вы зарезервируете достаточно места для пункта назначения.
Ваш пункт назначения также должен быть прерван '\0'
(которого сейчас нет в вашем коде), чтобы он печатался правильно!
Вы не можете скопировать завершающий нулевой символ. Вы можете исправить это с помощью
*destPtr = 0;
на ред вашей функции.
Однако, на мой взгляд, следующая простейшая функция в стиле strcpy. Если я правильно помню, это
версия появилась в K&Р.
void stringCopy(char *sourcePtr, char *destPtr) {
while(*destPtr++ = *sourcePtr++)
;
}
Это скопирует всю строку, остановившись только после того, как она скопировала завершающий ноль.
Единственная проблема в вашем коде — вы не копируете '\0'
по назначению. Ниже код работает отлично
/* strcpy: copy t to s */
void strcpy(char *s, char *t)
{
while ((*s = *t)!=‘\0’) {
s++;
t++;
}
}