gpt4 book ai didi

c - 关于C中字符串和指针的几个问题

转载 作者:行者123 更新时间:2023-11-30 19:19:18 24 4
gpt4 key购买 nike

读完一些文章后,我留下了几个问题:

  1. 当我有一个未初始化的指针时,我无法将其放入其中,因为没有内存分配位置!当我有一个指向 char 类型变量的指针并且我想将其放入 %s 时,该程序允许我输入两个字符(2 个字节),超出后会打印错误。我的问题是,为什么 char 只能容纳一个字节,却可以放入两个字母?难道程序连两个字母都不应该落下吗?

  2. 不能像这样将字符串放入数组中:arr = "aaa"因为arr实际上是地址而不是可以保存char值的变量?

  3. 我读了一些关于 undefined behavior 的内容,是否可以理解,有一个折扣不会使用指向字符串的 char 指针,因此指向 char 的字符串的打印会以意外的方式进行?

最佳答案

1.这可能与对齐有关。如果 char 变量后面有一个多字节类型,则中间可能有少量未使用的字节,但您不能依赖于此,因为它显然是未定义的。

我建议使用 valgrind 来检查内存问题,而不是依赖于观察。

2.这里的区别在于

char *s = "Hello world";会将 Hello world 放入内存的只读部分,并使 s 成为指向该部分的指针,从而使对此内存的任何写入操作都是非法的。做的时候:

char s[] = "Hello world";将文字字符串放入只读内存中,并将该字符串复制到堆栈上新分配的内存中。从而使得

s[0] = 'J';合法。

3.没有字符串指针,字符串也使用char指针。当你想指向字符串时,可以使用 char 指针。问题是您试图在一个字母的位置上存储两个字母。

关于c - 关于C中字符串和指针的几个问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24902566/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com