Я хочу выделить память для строки с помощью calloc, я знаю, что calloc заполняет всю выделенную память 0, но я также обнаружил, что они отличаются от \ 0 в некоторых контекстах. Все это обсуждение сбивает с толку новичка (такого как я), поэтому мне было интересно, может ли кто-нибудь дать мне окончательный ответ, если я использую alloc для инициализации строки, мне нужно вручную установить последний символ на "\ 0" или не?
Строки с завершающим нулем, созданные с помощью calloc?
Ответы (1)
Нет никакой разницы между целым значением 0
, которым calloc
заполняет выделенную память, и буквальным символом '\0'
, который идентичен целочисленному значению 0
.
Таким образом, если вы запишете до n-1
символов в блок памяти из n
символов, выделенный с помощью calloc
, у вас всегда будет действительная строка с завершающим нулем.
person
Stephan Lechner
schedule
14.05.2020
'\0'
на самом деле является восьмеричным escape-символом для0
. Таким образом, нулевой терминатор'\0'
действительно равен нулю. - person Some programmer dude   schedule 15.05.2020calloc
, а затем помещаете в эту память строку из 5 символов (например, привет). Это не сработает, потому что hello нужно 6 байтов, 5 для букв и еще один для'\0'
в конце. 2) вы выделяете 6 или более байтов, помещаете hello в память, а затем пытаетесь изменить строку на hi. Это не сработает, если послеi
не будет'\0'
. Без'\0'
вы получите привет. - person user3386109   schedule 15.05.2020