Я испытываю неожиданное взаимодействие с инициализацией массива char.C - Инициализация массива с использованием массива strlen неправильного размера
При инициализации char [] с размером strlen (параметр char []), новый инициализированный символ [] слишком велик. Я не уверен, что вызывает это.
int main(void)
{
char myString[] = { " " };
foo(myString);
}
int foo(char str[])
{
char testString[ strlen(str) ];
printf("Length of testString: %lu\n", strlen(testString));
return 0;
}
Когда я бегу Foo, выход
Length of testString: 6
, когда я ожидал, чтобы это было 1.
Даже незнакомец когда я добавить оператор печати в Foo до инициализации testString, выход, кажется, магически фиксирует себя:
int foo(char str[])
{
printf("Length of str: %lu\n", strlen(str));
char testString[ strlen(str) ];
printf("Length of testString: %lu\n", strlen(testString));
return 0;
}
Foo печатает
Length of str: 1
Length of testString: 1
У меня есть ощущение, что у него есть что-то делать с тем, как полукокса [] передаются в функции, или, возможно, неожиданное поведение STRLEN, но у меня действительно нет идея.
Любая помощь приветствуется.
Um ... Вы не инициализируете свой массив 'testString' вообще. Вы указали размер, но сам массив оставлен неинициализированным: он содержит мусор. Попытка применить «strlen» к неинициализированному массиву приводит к неопределенному поведению. Это то, что вы наблюдаете. И да, неопределенное поведение может и будет вести себя непредсказуемым образом и даже может показаться «волшебным образом зафиксировать себя». – AnT
http://stackoverflow.com/questions/16381307/strlen-of-a-char-array-is-greater-than-its-size-how-to-avoid –