strcat和静态分配的字符数组会发生什么?

时间:2011-10-21 15:03:49

标签: c static

我在一些遗留代码中发现了这一点。

static char title1[] = "SUMMARY REPORT";
static char title2[] = "PERIOD: ";

...

strcat(title2, "10/10/2011");

此strcat操作导致title1被日期字符串的一部分覆盖。我能够在一个小程序中重现这个,但不能用静态数组重现。我查看了遗留代码中的内存位置,title2缓冲区位于title1之前。修复很简单,我只是为title2添加了一个长度(在内存中进一步推动了title1的开始)来保存整个日期。为什么title2在内存中落后于title1?这是在SPARC上,顺便说一句。

2 个答案:

答案 0 :(得分:3)

  

为什么title2在内存中落后于title1?

为什么不呢?该标准不保证对象的位置。你展示的代码根本就是错误的。 strcat目标应包含一个C字符串,并且足够大以包含连接的结果字符串。

答案 1 :(得分:0)

strcat假设您传入的缓冲区足以容纳连接的字符串,如果它太小,它将覆盖缓冲区的末尾。所以无论你的缓冲区后面是什么都会被覆盖。