当前位置: 首页 > 知识库问答 >
问题:

这些字符数组减少的背后是什么?[重复]

冀崇凛
2023-03-14

以下是全部代码:

#include <stdio.h>  //printf
#include <stdlib.h> //malloc
#include <string.h> //memcpy

void main(void)
{
    char* charMem = (char*) malloc(5 * sizeof(char));
    memcpy(charMem, "Hello", 5);

    char charArr[] = "Hello";

    printf(" charMem = %p\n", charMem);
    printf("&charMem = %p\n\n", &charMem);

    printf(" charArr= %p\n", charArr);
    printf("&charArr= %p\n\n", &charArr);

    charMem[2] = 'A';
    charArr[2] = 'A';
}

输出是:

 charMem = 00F8ABB0 //diff
&charMem = 00CFFBB0 //diff

 charArr= 00CFFBA0 //same
&charArr= 00CFFBA0 //same

编译器背后发生了什么导致了这些结果?

共有2个答案

酆阳煦
2023-03-14

将charPtr声明为指向char的指针,并将其初始化为指向字符串“Hello”。

字符串“你好”保存在内存的只读区域中,因此当您试图修改字符串“你好”的第三个位置时,它会崩溃。

更正它以声明它是正确的

char charPtr[] = "Hello";

像这样声明它,您将能够修改数组charPtr[]。

查看附件J.2未定义的行为我们看到它是未定义的

— The program attempts to modify a string literal (6.4.5).
伏子辰
2023-03-14

char*charPtr="Hello";

“Hello”字符的只读数组。修改其内容是未定义的行为。

有些程序员喜欢自己动手

const char *charPtr = "Hello";

以便编译器检查对只读数组内容的尝试更改。

charPtr[2] = 'A'; // attempt to change a readonly/const element

 类似资料:
  • 问题内容: 有人可以解释为什么跟随返回“ cc”吗? 有人告诉我,因为它将每个匹配项都放入了group(1)中,所以最后一个匹配项是’cc’。真的吗? 那么下面如何解释? 问题答案: 重复捕获组:组号保持不变 由定义的组是组1。量化器重复它。每当引擎能够重复该组(匹配两个字符)时,组1就会被覆盖。 引擎开始匹配时,捕获到组1 然后捕获到组1 然后捕获到组1。 当您检查组1时,引擎将返回。所有其他捕

  • 这些叫什么?在powershell中编写脚本时,我可以使用它们来设置或转换变量的数据类型,但这是什么术语呢?这些有官方文件吗? 示例:

  • 问题内容: 我正在查看类似于以下内容的代码行: 我认为符号字符串是指每小时,每分钟等显示的数字字符的数量-或类似的东西,我不确定。 通常,我可以弄清楚这种情况,但是在Google上搜索“%02d%01d”时找不到任何有用的参考。有人能为我阐明一下吗? 问题答案: http://www.cplusplus.com/reference/clibrary/cstdio/printf/ 相同的规则应适用于

  • 我对编程很陌生,我已经自学了将近一个月了,有谁能给我解释一下我代码中错误的原因吗?在“Total(moneyConv(moneySum*moneyRate))”中出错。行,表示实际和形式的论点在长度上是不同的。我检查了我所有的参数,我觉得很好。多谢!

  • 问题内容: 除了标准,,和运营商; 但什么是这些均值(,,,)? 又如何操作? in返回正常的余数模量,但是仅当,为什么会这样?怎么办? 又如何操作?它有什么作用? 问题答案: :求幂 :异或(按位) :模数 :除以积分结果(舍弃余数)

  • 我是一名学生,我喜欢在我的系统中探索随机的Python文件。这帮助我学到了很多东西。 我遇到了以下代码: 我不明白是什么意思。 我试图通过打字找出它是什么 这将显示。但我以前从未见过这种情况。 这是用十六进制写的吗? 它的实际int值是多少?