我觉得在一个字符串中用C替换两个字符会让人感到困惑.当我将它设置为数组时,它会很好用:
char strBase[8] = "acbdefg";
在这种情况下,我可以交换任何角色.但是当我将其设置为字符串时,它会触发总线错误:
char *strBase = "acbdefg";
非常感谢任何人都可以解释它或给我一些暗示!
这里的区别在于
char *strBase = "acbdefg";
Run Code Online (Sandbox Code Playgroud)
将放置acbdefg在内存的只读部分并strBase指向该内存,使得此内存上的任何写入操作都是非法的.
它没有名称,并且具有静态存储持续时间(意味着它在程序的整个生命周期中都存在); 和一个名为pointer-to-char的变量,调用它strBase,该变量初始化为该未命名的只读数组中第一个字符的位置.
做的时候:
char strBase[8] = "acbdefg";
Run Code Online (Sandbox Code Playgroud)
将文字字符串放在只读内存中,并将字符串复制到堆栈上新分配的内存中.
所以这个数组在内存中分配,它的存在时间取决于声明出现的位置.如果声明在一个函数内,它将一直存在到声明它的块的结尾,并且几乎肯定会在栈上分配; 如果它在函数外部,它可能存储在"初始化数据段"中,该数据段在程序运行时从可执行文件加载到可写存储器中.
制造
strBase[0] = 'x';
Run Code Online (Sandbox Code Playgroud)
法律.
| 归档时间: |
|
| 查看次数: |
1079 次 |
| 最近记录: |