Я наткнулся на эту функцию в блоге, и я нашел ее действительно крутой. Я понимаю, как это работает концептуально, поскольку C++ был моим первым языком.
Однако, когда я попытался написать его в моей программе, он, похоже, не работает. Я googled повсюду, но я только нашел объяснения относительно того, как это работает, таким образом я был действительно тупик.
Вместо копирования NULL char [5] (который должен оцениваться как false, ничего не копировать и прерывать цикл), он дает две ошибки компиляции, говоря, что "я не могу увеличить значение типа char [6]" (вне -bounds для обоих массивов).
Почему мой цикл не разбивается на char [5]?
Я предполагаю, что это связано с тонкостями char и string, я попытался инициализировать строки вместо включенной cstring, которая тоже не работала, появляется аналогичная ошибка "не может увеличивать строку типа".
#include <iostream>
using namespace std;
int main () {
char s[] = "hello";
char t[] = "house";
while (*s++ = *t++);
cout << s;
return 0;
}
Вы не можете увеличивать массив. Что бы это значило?
Попробуй это:
#include <iostream>
using namespace std;
int main ()
{
char s[] = "hello";
char t[] = "house";
char *ss = s;
char *tt = t;
while (*ss++ = *tt++);
cout << s << endl;
}
Строка "while (* ss++ = * tt++)" всегда будет истиной, потому что = является оператором присваивания. Вероятно, вы хотите "while (* ss++ == * tt" ")", который сравнивает равенство.
*tt == '\0'
. И в этом суть, потому что целью является копирование до тех пор, пока не будет найден этот конкретный символ (нулевой терминатор).
a=b=c;
s
иt
.