Что не так с этой функцией strcpy с указателями?

Я часами рвал свою программу, пытаясь найти программу. Я, наконец, ограничил это всего лишь парой строк кода, но все же я все еще глуп (или устал), чтобы найти проблему.

Все это функция копирования строк с использованием указателей. Кто-нибудь может это просмотреть?

void stringCopy(char *sourcePtr, char *destPtr)
{
while(*sourcePtr!='\0')
{
*destPtr=*sourcePtr;
destPtr++;
sourcePtr++;
}
}

Он вводит значения мусора в мои строки, как будто я каким-то образом выхожу за пределы строки.

Кроме того, он используется только для копирования строк длиной менее 10. Объявленные исходный и целевой массивы имеют размер 20. Все жестко запрограммировано.

Я бы использовал strcpy, но это назначение для класса, и это не разрешено.

РЕДАКТИРОВАТЬ: я просто забыл ввести окончательный нулевой символ в пункт назначения! Извините за все неприятности, ребята!

0

Решение

самый простой strcpyX() функция:

void strcpyX(char *dest, const char *src){
while(*src) *dest++ = *src++;
*dest = '\0';
}

Помните, это сработает, только если вы зарезервируете достаточно места для пункта назначения.

Ваш пункт назначения также должен быть прерван '\0'(которого сейчас нет в вашем коде), чтобы он печатался правильно!

4

Другие решения

Вы не можете скопировать завершающий нулевой символ. Вы можете исправить это с помощью

*destPtr = 0;

на ред вашей функции.

Однако, на мой взгляд, следующая простейшая функция в стиле strcpy. Если я правильно помню, это
версия появилась в K&Р.

void stringCopy(char *sourcePtr, char *destPtr) {
while(*destPtr++ = *sourcePtr++)
;
}

Это скопирует всю строку, остановившись только после того, как она скопировала завершающий ноль.

3

Единственная проблема в вашем коде — вы не копируете '\0' по назначению. Ниже код работает отлично

/* strcpy: copy t to s */
void strcpy(char *s, char *t)
{
while ((*s = *t)!=‘\0’) {
s++;
t++;
}
}
0
По вопросам рекламы [email protected]