Если бы я выделил такую строку, было бы безопасно работать?то есть я должен ожидать какой-либо UB при записи / чтении в / из него?
void example()
{
char exmapleString[32];
char exmapleString[0] = '\0';
}
Даже если exmapleString
содержит данные мусора из-за неправильной инициализации (то есть char exmapleString[32] = { 0 };
), я установил первое значениемассива exmapleString
в \0
, поэтому, если бы я пропустил его через такие функции, как strcpy
, strcat
и т. д. ... Терминатор NULL был бы помещен в конец строки, так что это означает, что эта строкабезопасно работать с ним, если я инициализирую его следующим образом и установлю первое значение массива на \0
?
Так что, несмотря на все проведенные мною тесты, похоже, что он работает нормально.
Эта функция работает
void example()
{
char exmapleString[32];
char exmapleString[0] = '\0';
strcat(exmapleString, "test");
print(exmapleString);
}
Но эта функция будет (большую часть времени) печатать мусорные данные
void example()
{
char exmapleString[32];
strcat(exmapleString, "test");
print(exmapleString);
}
Что заставляет меня поверить, что да, действительно, установка строки типаэто
char exmapleString[32];
char exmapleString[0] = '\0';
не должно приводить ни к какому UB.Это верно?Или это будет считаться небезопасным?