189 похожих чатов

Конечно char *a = "abc"; a[0] = 'D'; можно! что

вы меня в маразм вводите?)

перепутал "" и ''

38 ответов

23 просмотра

И прям компилится и запускается и всегу не падает?

Ponytale- Автор вопроса
MagistrDev upupup
И прям компилится и запускается и всегу не падает?

конечно. никогда char *a = "abc" не создавал константного массива.

MagistrDev upupup
И прям компилится и запускается и всегу не падает?

На микроконтроллерах (не знаю как на обычном x86) есть прям кусок на асм где он копирует инициализированные данные в память. Это перед main

Ponytale- Автор вопроса
Anton Glukhov
На микроконтроллерах (не знаю как на обычном x86) ...

собсно этого можно избежать, юзая компилятор-зависимые спецификаторы размещения в памяти при объявлении строки/массива и юзая потом спец. функции чтобы достать из флеша строку по мере надобности (чтобы экономить RAM) на МК

Ponytale
собсно этого можно избежать, юзая компилятор-завис...

примерчик можно какой-нибудь? не слышал я про такое.. было бы интеерсно посмотреть

а ничего что ваш компилятор пишет что программа не выполнитя?

Ponytale- Автор вопроса
Anton Glukhov
примерчик можно какой-нибудь? не слышал я про тако...

https://www.iar.com/knowledge/support/technical-notes/compiler/strings-with-iccavr-2.x/ http://microsin.net/programming/avr/avrstudio-gcc-progmem.html

Ponytale
конечно. никогда char *a = "abc" не создавал конст...

Ну да, ну да. Пошёл я нахер *стандарт C*. Литералы - это вообще единственные константы времени компиляции в си.

Ponytale- Автор вопроса
Wild_Wind
Ну да, ну да. Пошёл я нахер *стандарт C*. Литералы...

мы уже вчера выяснили, что стандарт эту вещь не описывает.

Ponytale
мы уже вчера выяснили, что стандарт эту вещь не оп...

Описывает, см. https://en.cppreference.com/w/c/language/character_constant

Ponytale- Автор вопроса
Ponytale
а где там строки?

Строки это массив Character constant.

Ponytale- Автор вопроса
Wild_Wind
Строки это массив Character constant.

я все-равно не вижу, где это там написано. там только про integer constants в expression поле, которое обозначает размер массива

Ponytale
я все-равно не вижу, где это там написано. там тол...

Пардон, не то скинул. Вот про строковые литералы, то про символьные было: https://en.cppreference.com/w/c/language/string_literal

Ponytale- Автор вопроса
Wild_Wind
Пардон, не то скинул. Вот про строковые литералы, ...

"String literals are not modifiable (and in fact may be placed in read-only memory such as .rodata). If a program attempts to modify the static array formed by a string literal, the behavior is undefined." Мы вернулись к тому, с чего начали: стандарт Си не определяет что будет при попытке изменения строкового литерала.

Ponytale- Автор вопроса
Wild_Wind
Определяет. Это ub.

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

Ponytale- Автор вопроса
Ponytale
UB это придумали плюсовики чтобы оправдать логичес...

@shiz01 а если серьезно: то в Си есть масса специально заложенного UB. Взять хотя бы незаданность размера основных типов в битах/байтах. И сделано это было умышленно: чтобы на языке можно было (четко понимая, что ты делаешь) попытаться написать хоть как-то переносимый с одной платформы код на другую. Это был огромный шаг от ассемблера. Поэтому UB в Си это не повод возмущаться и кричать что это говнокод: а всего-лишь понимание, что эта вот часть кода: аппаратно-зависима.

Vga
ТруЪ Си только от K&R!!11

Вот вы смеетесь, а мне на полном серьезе так отвечают...

Ponytale
@shiz01 а если серьезно: то в Си есть масса специа...

Да, но порой этот ub ведёт себя неожиданно и ты малость охреневаешь.

Ponytale- Автор вопроса
Ponytale
@shiz01 а если серьезно: то в Си есть масса специа...

В отличие от плюсов, где тег UB автоматически означает что проггер типа дурак и все типа тычут в него пальцем и дальше думать отказываются

Ponytale- Автор вопроса
Vga
ТруЪ Си только от K&R!!11

Конечно. А в чем есть сомнения?

Wild_Wind
Это прост комьюнити токсичное.

Там и компиляторы токсичные! :D

Vga
Там и компиляторы токсичные! :D

Ага, так обложат ошибками подстановки шаблонов, что и спиться недолго.

Wild_Wind
Ага, так обложат ошибками подстановки шаблонов, чт...

- у меня было 2ТБ свободного места на винте, где они? - не знаю, кстати посмотри я тебе там лог ошибок сохранил

Ponytale- Автор вопроса
Wild_Wind
Да, но порой этот ub ведёт себя неожиданно и ты ма...

потому, что количество UB перешло в новое качество: человек уже слабо понимает, как работает его код.

Vga
- у меня было 2ТБ свободного места на винте, где о...

у меня как-то однажды баг в драйверах инвидии засрал логи на 400ГБ+ за пару часов работы

Ponytale
потому, что количество UB перешло в новое качество...

Это он так считает потому что оптимист

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта