首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Strcpy()数组声明?

Strcpy()数组声明?
EN

Stack Overflow用户
提问于 2016-09-27 14:49:55
回答 1查看 119关注 0票数 1

我这样做只是为了把strcpy()写进我的大脑,我注意到如果我把括号留空了,编译器就会说它需要一个初始化器或者需要一个指定的值来编译。但是,我可以将任何值放入括号中,它仍然可以编译。即使是零..。但是,如果strcpy()函数将字符串终止符添加到已声明的字符串中,为什么我还需要在括号中放一个占位符?

下面的代码...

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2016-09-27 14:54:45

只有GCC允许将零长度数组作为non-standard extension (一些与GCC兼容的编译器也允许这样做)。

当然,您不能在这样的数组中存储任何内容,所以将yearFirst作为参数传递给strcpy() -无论是第一个参数还是第二个参数- leads都是未定义的行为。任何事情都有可能发生。崩溃是可能的;它甚至可能看起来是有效的。不要这样做。确保分配足够的空间来存储您计划复制到数组中的任何内容。这是C编程的主要要求;这就是为什么有些人更喜欢其他语言,因为他们不需要关注这种细节。但是不需要C编译器来诊断您的失职行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39717871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档