gpt4 book ai didi

c - string是数组还是指针?

转载 作者:行者123 更新时间:2023-11-30 20:35:21 26 4
gpt4 key购买 nike

我在这里得到了这个小程序,它带有预先分配的“count”数字,然后将其解析为“xxx”的格式,其中x是0或相应的密码(例如,从“6”我得到006,从234 我得到 234)。当我得到这样的结果时

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
int count = 0;

char number[2] = {0};

int base0 = count % 10;
int base1 = ((count % 100) - base0) / 10;
int base2 = ((count % 1000) - base1) / 100;
sprintf(number, "%d%d%d", base2, base1, base0); //print into the number variable
printf("%s\n", number);
}

一切工作正常,但如果我用

切换“数字”变量定义
char* number = NULL;

我遇到段错误。这是为什么?它应该只指向字符串的开头。

最佳答案

在 C 语言中,字符串表示为字符数组;该行

char number[2] = { 0 };

因此定义了一个用两个空字符初始化的两个字符数组(“字符串”)。

数组是一系列连续(读作“彼此相邻”)的内存块,每个内存块都可以通过下标运算符(方括号)单独访问。

当您将上面的行更改为

char* number = NULL;

您不再定义字符数组。在本例中,您现在正在定义一个指向 char 变量的指针。因为数组基本上是彼此相邻的内存块,所以如果您知道第一个元素在哪里,就可以找到任何其他元素。因此,由于引用运算符允许您访问指针指向的值,因此您可以使用

访问字符串中的第 i 个元素
*(char + i)

在 C 语言中完全等同于

char[i]

现在,在您的情况下,您尚未将 char* 设置为指向包含真实字符串的实际内存,您已分配了 NULL 指针,这意味着“此指针无处指向”。将 char* 视为字符串需要取消引用(跟随指针);但是,取消引用 NULL 指针是一种未定义的行为,在这种情况下会导致段错误

关于c - string是数组还是指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39780826/

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