#include <stdio.h>
#include <string.h>
int main()
{
char a[]={};
scanf("%s",a);
printf("%lu",strlen(a));
return 0;
}
这样编译运行,居然毫无问题
#include <stdio.h>
#include <string.h>
int main()
{
char a[]={};
scanf("%s",a);
printf("%lu",strlen(a));
return 0;
}
这样编译运行,居然毫无问题
10 回答11.1k 阅读
1 回答3.3k 阅读
1.1k 阅读
c99允许长度为零的数组。当然目的不是为了你这样用,而是为了实现柔性数组成员。
比如:\
之前标准contents必须给至少1个字节,这样会浪费空间,且给malloc的函数参数计算不够简洁。
以前看redis代码,我记得很多地方都这样用。
你这样用,对没有分配的内存进行操作,属于内存非法操作,不过c不管这些的,随你搞。因为小代码,这个操作没有惹到别的进程,以及系统,所有没有爆。就像内存泄露,虽然是错误的做法,倒也不至于立刻引发问题。