【发布时间】:2014-12-18 02:42:54
【问题描述】:
在下面的代码中,fizz 打印正确,但 Buzz 没有。在这里使用 char 数组有什么问题,或者我以什么方式错误地使用它?
#include <stdio.h>
int main() {
int i;
char *fizz = "fizz";
char buzz[4] = "buzz";
for(i = 1; i <= 100; i++) {
if(!((i %3 == 0) || (i%5 == 0)))
printf("%d", i);
if(i%3 == 0)
printf("%s", fizz);
if(i%5 == 0)
printf("%s", buzz);
printf("\n");
}
}
【问题讨论】:
-
这一行:char buzz[4] = "buzz";会溢出buzz[]缓冲区,因为字符串包含一个空终止字节,所以“buzz”实际上是5个字节长。写入缓冲区末尾是未定义的行为,可能导致段错误事件
标签: c arrays pointers gcc char