我这样做只是为了把strcpy()写进我的大脑,我注意到如果我把括号留空了,编译器就会说它需要一个初始化器或者需要一个指定的值来编译。但是,我可以将任何值放入括号中,它仍然可以编译。即使是零..。但是,如果strcpy()函数将字符串终止符添加到已声明的字符串中,为什么我还需要在括号中放一个占位符?
下面的代码...
#include <stdio.h>
#include <string.h>
main()
{
char yearFirst[0]; <------ HOW DOES THIS still EXECUTE??
char yearSecond[6];
char month[5];
/* when declaring strcpy function, place each copied string before.
their desired print function.
or else the print function will print thr same strcpy for each print
function proceeding it.
ex.
strcpy(yearFirst, "Sept., Oct., Nov., Dec., Jan.");
strcpy(yearSecond, "Mar., Apr., May., Jun. Jul., Aug.");
followed by:
printf("These months have 1-31 days: %s\n\n", yearFirst)
printf("These months have 1-30 days: %s\n\n", yearSecond);
output will equal both statements saying
"These months have 1-31: sept oct ...."
"these months have 1-30: sept oct....."
*/
strcpy(yearFirst, "Sept., Oct., Nov., Dec., Jan.");
printf("These months have 1-31 days: %s\n\n", yearFirst);
strcpy(yearSecond, "Mar., Apr., May., Jun. Jul., Aug.");
printf("These months have 1-30 days: %s\n\n", yearSecond);
strcpy(month, "Feb.");
printf("%s has 1-28 days\n", month);
return 0;
}发布于 2016-09-27 14:54:45
只有GCC允许将零长度数组作为non-standard extension (一些与GCC兼容的编译器也允许这样做)。
当然,您不能在这样的数组中存储任何内容,所以将yearFirst作为参数传递给strcpy() -无论是第一个参数还是第二个参数- leads都是未定义的行为。任何事情都有可能发生。崩溃是可能的;它甚至可能看起来是有效的。不要这样做。确保分配足够的空间来存储您计划复制到数组中的任何内容。这是C编程的主要要求;这就是为什么有些人更喜欢其他语言,因为他们不需要关注这种细节。但是不需要C编译器来诊断您的失职行为。
https://stackoverflow.com/questions/39717871
复制相似问题