Проблема в том, что p
не является символьным массивом с нулевым символом в конце, поэтому его нельзя использовать в качестве строки . Использование этого аргумента для вызовов функций, которые ожидают строку , вызовет неопределенное поведение (UB) .
Вывод программы, содержащей UB, не может быть оправдан ни при каких обстоятельствах. манера.
Чтобы добавить больше контекста, q
завершается нулем, в соответствии с правилом списка инициализаторов, имеющего меньше аргументов, чем размер агрегата, остальные члены инициализируются так, как если бы они имели stati c storage, поэтому в случае типа char
они инициализируются с 0
(который является нулевым терминатором, необходимым для строки). Итак, использование q
в качестве строки - это нормально.
Решение:
Вы можете либо
- упомянуть измерение, превышающее это элементов списка инициализатора
- положить нулевое значение в качестве последнего элемента в списке инициализатора
{'a','b','c', '\0'}
- использовать строку (вместо списка инициализатора) для инициализируйте массив, например
"abc"
, который будет включать нулевой терминатор в массиве.