HANDLE
BANNED | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору lungtung Цитата: Но при использоффании указатель : char* string = "12345678901234567890"; // даже 20 символофф длинее "Hello world"; strcpy(string,"Hello world") ; // ---> нихуя ненапрегаиццо, нах??? | Советую тебе разобраться с переменными, как они объявляются, где располагаются. Да и с типами переменных заодно. А так же со стеком, что и когда туда помещается. char* string = "12345678901234567890"; Не вполне корректное объявление. В данном случае string - это всего лишь указатель расположенный в стеке. В него помещается адрес строки "12345678901234567890". А где расположена эта строка? В секции констант. А где расположена строка "Hello world"? Там же. Более соответствующее действительности объявление будет выглядеть так: const char* string = "12345678901234567890"; Твоя программа пытается произвести операцию записи в секцию только для чтения, за что получит "штраф" либо ещё на стадии компиляции, либо во время выполнения. char string[] = "12345678901234567890"; strcpy(string,"Hello world") ; При таком объявлении в стек помещается уже не указатель, а массив, который будет проинициализирован. Его размер будет определяться размером инициализирующей строки. char string[100] = "12345678901234567890"; strcpy(string,"Hello world") ; Тоже самой, только с заданным размером string (100). И учти, что если ты копируешь в локальную переменную больше, чем она может принять, то ты испортишь содержимое стека, и программа сделает "RunTime Error" Есть ещё один вариант - глобальные переменные. char string[] = "12345678901234567890"; void Function() { strcpy(string,"Hello world") ; } Здесь переменная string уже не в стеке, а в секции переменных, куда можно что то записывать. |