segmentation-fault - 为什么程序在编辑固定字符串时不抛出段错误?
问题描述
我是工会的新手。在下面的代码中,根据我的理解,我们正在编辑一个固定的字符串文字“GeeksQuiz”,尝试用 'S' 代替 G。它不应该抛出一些段错误。如果不是,那么为什么答案不是 "SeeksQuiz" 而是 "GeeksQuiz" ?
# include <iostream>
# include <string.h>
using namespace std;
struct Test
{
char str[20];
};
int main()
{
struct Test st1, st2;
strcpy(st1.str, "GeeksQuiz");
st2 = st1;
st1.str[0] = 'S';
cout << st2.str;
return 0;
}
解决方案
让我逐行分解这里发生的事情:
Struct Test st1, st2;
创建两个本地结构测试。这些不是指针/引用,而是结构本身。如果您尝试打印出结构,它们将具有随机字符,因为 str 未初始化。strcpy(st1.str, "GeeksQuiz");
将字符串文字 GeeksQuiz 复制到 st1.str,因此 st1.str 应该具有带有空终止字符的 GeeksQuiz。st2 = st1;
我们将 st1 设置为等于 st2。两者都不是指针或引用,(平面对象)所以它喜欢int a = 5; int b = 6; a = b; // a = 6 a = 7; // a = 7, b is still 6
所以st2.str
= GeeksQuiz,st1.str
= GeeksQuiz,但它们(st1,st2)都是独立的实体。
st1.str[0] = 'S';
st1.str = SeeksQuiz,st2.str = GeeksQuiz。cout << st2.str;
st2.str = GeeksQuiz,这是输出的内容。
我们无处尝试更改实际文字本身,只要我们使用文字来初始化某些东西,它就会被复制到该变量中。我希望这一切都能澄清你的问题。
如果st1
和st2
是指向结构的指针,那么设置st1 = st2
两者将指向内存中的同一位置,因此通过更改某些*st1
内容也会反映在*st2
其中,但这里不是这种情况。
推荐阅读
- c - scanf 后出现跳过循环的问题
- node.js - 通过依赖注入在控制器中使用 socket.io
- html - 当我在 iPhone 上将字体大小设置为低于 16px 时,IOS 会自动放大
- image - ShareX 上传脚本作为不和谐嵌入?
- angular - 在 android studio 的 ionic 应用程序中获取 [object Promise] 作为 xml 响应
- docker - Airflow Docker Operator 移除容器或以附加模式启动容器
- javascript - 为什么 Shopify 产品详细信息页面上会出现 net::ERR_ABORTED 404 之类的错误
- leaflet - react-leaflet babel loade 错误:./node_modules/react-leaflet/esm/Pane.js 25:37 模块解析失败:意外令牌 (25:37)
- rxjs - rxjs 中最后一次发射的延迟
- python - 每次调用自定义层时,在自定义层的调用方法中创建张量是否会在图上创建新节点?