В вашем коде:
strcpy(a,b);
вызывает неопределенное поведение , когда вы пытаетесь получить доступ к недопустимой памяти.Не полагайтесь на результат.
Для уточнения, a
имеет только память для хранения двух char
с, если вы попытаетесь написать (здесь, чтобы скопировать) больше, чем строка с одним символом (с нулевым терминатором), вы переполните выделенную память, тем самым рискуя оказаться в недопустимом месте в памяти.
Исходный буфер strcpy()
, b
содержит больше содержимого, которое может поместиться в буфер назначенияa
, таким образом, операция включает в себя переполнение границы.Задача программиста - обеспечить, чтобы в буфере назначения было достаточно памяти.
Тем не менее, что касается расчета размера - позвольте мне добавить, размер массива, как только он будет определен, изменить нельзя.Вы можете заполнить содержимое и оставить его унифицированным / неиспользованным, но размеры массивов после определения не могут быть изменены.