我遇到与char数组初始化的意外交互。C - 数组初始化使用strlen使数组大小错误
当初始化一个大小为strlen(char参数[])的char []时,新初始化的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;
}
富现在打印
Length of str: 1
Length of testString: 1
我有一种感觉,它是与焦炭方式[]传递到功能,或可能的strlen的一个意想不到的行为,但我真的没有理念。
任何帮助表示赞赏。
嗯......你根本没有初始化你的'testString'数组。您指定了大小,但数组本身未初始化:它包含垃圾。尝试将'strlen'应用于未初始化的数组会导致未定义的行为。这就是你正在观察的。是的,未定义的行为可以并且将以不可预知的方式表现,甚至可能会“神奇地修复自己”。 – AnT
http://stackoverflow.com/questions/16381307/strlen-of-a-char-array-is-greater-than-its-size-how-to-avoid –