Говнокод по пятницам. Эпизод 3. «Serial.println vs. Imperial Starfleet»

Не заметил такого. И где?

так неоднократно было сказано - строка 34

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

ЗЫ: интрига, однако ))

И что не так со строкой №34?

Принимающий буфер длиннее исходного, так что копирование проходит нормально - в чужую память не залазит.

После этого в строке №43 скопированная строка отлично печатается. Так что не так со строкой №34? Нет в ней никакой ошибки. Если есть, скажите какая.

С учетом того, что без этой строки ошибки тоже нет, проблема таки в копировании памяти ))

строковый литерал по идее константа, а вы в нее пишете

Опишите строки как символьный массив - проблема исчезнет

char  welcomeMessage[] =  "TIE Fighter ECU standard mode!\r\n";
char  serviceMessage[] =  "TIE Fighter ECU service mode\r\n";

Или не копируйте сами строки, а копируйте только ссылку на нужный в какую-нить переменную.

Добавка
Вариант с копированием ссылки в #8 тоже неверный.

Не знаю, может быть, но после этого ломаются все println, что бы они не печатали :frowning:

Ладно, я пока удаляюсь, внятного описания ошибки (кроме “если убрать строку, то работает”), я пока не видел.

А

ну, конечно, а разве когда-то было по-другому?
Но дайте передохнуть. Я этот говнокод неделю рожал, а тут прям за час итоги :slight_smile: Дайте насладиться! :slight_smile:

3 лайка

Есть сильное подозрение, что знаете )))

Припоминаю вот этот ваш пост

и фразу от тудова

и ведь та же strcpy(), и Serial.println()… ))

снимаю шляпу, глюки очень красивые :slight_smile:

ну так дайте народу три недели, может @Komandir подтянется

char  welcomeMessage = (char *) "TIE Fighter ECU standard mode!\r\n";
char  serviceMessage = (char *) "TIE Fighter ECU service mode\r\n";

Так не ломается. Потому что меняем именно строки, а не указатели.

Кстати, почему? Проблема-то уходит

Ну, как Вам сказать. Я ведь тоже так … достаточно жирный троль. Вот в процитированном Вами посте есть фраза:

А теперь сравните её вот с этим :slight_smile:

Говорят, что "плюрализм в одной голове – это шизофрения". Может, она и есть?

1 лайк

потому что так вы переписываете единственный указатель на литерал

и он оказывается потерян

а не впендюриваем ли мы просто ноль по указателю (char *) “\r”
копируя строки?
и дальше трава не расти…

мистика какая то

теперь комментируем строку


:exploding_head:

чет мне кажется я на верном пути))

Строковый литерал это константа, переписывать его нельзя. Все остальное - зависит от компилятора и искать тут какие-то закономерности (имхо) - смысла не имеет.

Не серчай, я тока учусь на “Дарт Вейдер”