c++ - 字符数组文字在何处以及如何创建?

标签 c++ c arrays string

<分区>

我一直在用 c 语言对字符串进行试验。 在这段代码中。

#include<stdio.h>
int main()
{
    char *arr="output";
    *arr='s';
    printf("%s",arr);
return 0;
}

字符串“output”在内存中的什么位置被创建,并且我们有指针 arr(驻留在堆栈中)最初指向该字符串,为什么不能将其他一些字符分配给该指针? 当我尝试运行这个程序时,我看到运行时错误信号:11 这是段错误。

我了解到,在 C++ 中,字符串“输出”在只读内存中创建,这会导致在编译过程中“不推荐使用从字符串常量到‘char*’的转换”。C 中的行为是什么?

有人能解释一下为什么这会导致段错误吗?这个字符串“输出”首先在哪里创建。

谢谢。

最佳答案

Where in memory does the string "output" get created

数组本身是静态的。不确定它是否与具有相同内容的其他字符串文字数组位于同一位置。

why is it not possible to assign some other char to the pointer?

这样做会产生未定义的行为。

Can someone explain me why this causes segmentation fault?

许多实现将字符串存储在写保护的内存中,因此如果您尝试这样做就会出错。请注意,在现代 C++ 中,转换为 char*(而不是 const char*)不仅被弃用而且被禁止。

What is behaviour in c?

与在 C++ 中一样,尝试修改文字是未定义的行为,并且两种语言均未指定实现细节。我对 C 有点过时了,所以我不知道这些天是否允许、弃用或禁止向 char* 的狡猾转换。

关于c++ - 字符数组文字在何处以及如何创建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23368811/

相关文章:

c++ - 如何在没有选择的情况下更改 QTextEdit 中的当前行格式?

c - SQLite C API,可以打开数据库但不使用查询返回任何数据吗?

Java - 在数组中搜索子字符串

c++ - 如何使用OpenCV识别夜空照片中的星星?

c++ - 重写 << 运算符无法识别

c - 如何在 C 中连接常量/文字字符串?

c++ - 脚本引擎 - 调用 "unknown"函数

java - 数组中的数组 - Java 代码

php - 如何优化SQL查询并向现有数组添加更多数组元素?

c++ - 使没有成员的仿函数成为类成员对象或堆栈对象是否更有效?