gpt4 book ai didi

c - 在 C 结构中引用数组

转载 作者:太空宇宙 更新时间:2023-11-04 01:31:01 25 4
gpt4 key购买 nike

我来自 Java 背景,并试图更好地理解 C 结构、指针和数组。这是我正在玩的示例代码:

如果以下工作:

#include <stdio.h>

int main(void) {
char string[] = "Hello";
printf("%c",string[0]);
return 0;
}

为什么以下返回错误?

#include <stdio.h>

int main(void) {
typedef struct{
int x;
char string[8];
}ST_DATA;

ST_DATA *my_data;
my_data->x = 100;
my_data->string = "Hello"; // issues a warning, described below

printf("%d",my_data->x); // works fine
printf("%c",my_data->string[0]);
return 0;
}

以下是我遇到的错误:

编译错误时间:0内存:2292信号:0

prog.c: 在函数“main”中:

prog.c:12:18: 错误:从类型“char *”分配给类型“char[8]”时类型不兼容

my_data->string = "你好";

我也尝试了以下更改:

一)

my_data->string[] = "Hello";

这会给我以下错误:

prog.c: 在函数“main”中:

prog.c:12:18: 错误:']' 标记前的预期表达式

my_data->string[] = "你好";

              ^

b)

my_data->string[8] = "Hello";

这会返回一个运行时错误。据推测,错误发生在我打印第一个字符时。

一定有一些愚蠢的事情是我正在做或期望的(习惯于使用 C 语言以外的其他语言进行编码),但我似乎无法弄清楚为什么会发生这种情况以及如何让它工作。我将非常感谢任何指点(哈!明白了吗?)

最佳答案

在第一种情况下,您会自动为 char string[] = "Hello" 分配内存。编译器在这里负责内存管理。

在第二种情况下,my_data 是一个指针,您需要在为其分配内容之前手动为其分配内存。

您可以:

ST_DATA *my_data = (ST_DATA *)malloc(sizeof(ST_DATA));

最好花些时间阅读有关自动内存分配和动态内存分配的内容。

关于c - 在 C 结构中引用数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22356801/

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