c - 为什么 '\0' 没有被压入堆栈以指示字符串的结尾?
问题描述
我是 C 的新手,对不起,如果我的问题听起来很愚蠢。我们知道对于下面这样的字符串(来自https://www.tutorialspoint.com/cprogramming/c_strings.htm:
char greeting[] = "Hello";
C 将在内存中附加特殊字符\0
以指示字符串的结尾,如下图所示:
所以我只是做了一个实验来证明\0
是在内存中,下面是我的代码:
C代码:
int main()
{
char str[] = "dd";
printf("%s", str);
return 0;
}
汇编代码:
//only show relevant code
main:
subq $24, %rsp
movw $25700, (%rsp) //decimal 25700 is 0x6464 where hex 64(decimal 100) is 'd' in ascii
movb $0, 2(%rsp)
...
call printf
...
所以你可以看到汇编代码只将“dd”推送到堆栈,那\0
呢?它不会被推入堆栈?那么C如何知道第二个'd'是字符串的结尾?
解决方案
推荐阅读
- sql - 将多列的单行转置为两列的多行
- git - 使用 golang exec 库将 gitconfig 参数传递给 git bash
- label - 提取分类变量的值标签
- scip - 根据原始变量存储可行的解决方案
- r - 添加不包括重复项的值
- python - 如何使用 strptime() 将具有非常精确时间测量的时间字符串转换为日期对象?
- peoplesoft - 是否可以在 PS 查询表达式中使用 FROM?如果没有,是否有替代解决方案?
- html - ngFor over array 或 observable 不会更新 html 值 angular 8
- numpy-ndarray - Numpy 沿新维度连接
- reactjs - Electron 无框架浏览器窗口不会完全删除 Mac 上的整个框架/标题栏