Что значить while(*from) и *to = »? До какой точки будет выполняться цикл?

Программа была написана при помощи массивов, строк и указателей.
Общий формат функции strcpy() таков:
strcpy(to, from);
Функция strcpy() копирует содержимое строки from в строку to.
Исходный код:

#include <iostream>
#include <cstdio>
using namespace std;

void mystrcpy(char *to, char *from);

int main()
{
char str1[20], str2[20];
cout << «enter string: «;
gets(str1);

mystrcpy(str2, str1);

cout << «string copiet: » << str2;

cin.get();
return 0;
}

void mystrcpy(char *to, char *from)
{
while(*from)
{
*to = *from;
to++;
from++;
}
*to = »;
}
  • Вопрос задан
  • 192 просмотра
Решения вопроса 1
petermzg
@petermzg
Самый лучший программист
*from - получение значения по определенному адресу, на который ссылается указатель.
0 = false для условия while(...)
from++ - переход к следующему значению. Тут важно помнить что (address = address + sizeof(T)), где T - тип значения, а не ссылка на него.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Пока *from!=0 посимвольное копирование строки
Ответ написан
Комментировать
@abcd0x00
Классическая запись этой функции
void mystrcpy(char *to, char *from)
{
    while((*to++ = *from++))
        ;
}


Код
#include <iostream>
#include <cstdio>

using namespace std;

void mystrcpy(char *to, char *from);

int main()
{
    char str1[20], str2[20];
    cout << "enter string: ";
    gets(str1);

    mystrcpy(str2, str1);

    cout << "string copiet: " << str2;
    cin.get();
    return 0;
}

void mystrcpy(char *to, char *from)
{
    while((*to++ = *from++))
        ;
}



А тот учебник, в котором ты это взял, лучше выкинуть на помойку. Потому что от использования gets() все отказались уже давным давно, так как у неё нет ограничителя длины.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы