首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中使用<< (less less)创建字符数组

在C中使用<< (less less)创建字符数组
EN

Stack Overflow用户
提问于 2011-12-14 17:25:50
回答 6查看 112关注 0票数 0

当数组定义如下时,意味着什么:

代码语言:javascript
复制
char a[256<<1];
char b[256<<1];

有没有人知道为什么当a在b之前定义时代码可以工作,而当a在b之后定义时代码就不能工作?就像这样是行不通的:

代码语言:javascript
复制
char b[256<<1];
char a[256<<1];
...other code with a and b;
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-12-14 17:27:54

我不能立即看到一个原因,因为没有上下文。也许如果数组所属的某个结构是通过指针算法访问的,那么是的,我可以看到发生这种情况的原因,或者只是指针算法一般假设a和b的顺序。否则,我看不出为什么这会导致失败。如果您可以提供上下文,这将有所帮助。

重新排列它可能会在代码中的某个地方显示缓冲区溢出(可能以前a只是溢出到b中,但现在因为这个新的顺序,a溢出到其他堆栈变量中,并导致奇怪的事情发生)。如果您正在使用不安全的调用,例如对长度超过512个字符的行进行get之类的调用,这是很常见的。

<<是左移位运算符,所以它取256,并将其左移1位,即为512。

票数 2
EN

Stack Overflow用户

发布于 2011-12-14 17:29:11

256<<1表示256位左移一位,即512。至于为什么代码以一种顺序工作,而不是以另一种顺序工作,最可能的解释是代码中有一个bug,它访问一个越界的数组,幸运的是,在一种情况下,访问会到达另一个数组。但也有其他的可能性。例如,代码可能会计算指向每个数组的指针的差值,并期望得到一个正结果。

票数 2
EN

Stack Overflow用户

发布于 2011-12-14 17:28:18

在本例中,<<运算符表示位左移。因此,x<<1x左移一位的整数,与x*2相同,256<<1是512。

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

https://stackoverflow.com/questions/8502060

复制
相关文章

相似问题

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