【发布时间】:2014-03-12 15:50:06
【问题描述】:
我来自 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 = "你好";
我也尝试了以下更改:
a)
my_data->string[] = "Hello";
这会给我以下错误:
prog.c:在函数“main”中:
prog.c:12:18: 错误:']' 标记之前的预期表达式
my_data->string[] = "你好";
^
b)
my_data->string[8] = "Hello";
这会返回运行时错误。大概是我打印第一个字符时发生的错误。
一定有一些愚蠢的事情我正在做或期待(习惯于使用除 C 之外的其他语言进行编码),但我似乎无法弄清楚为什么会发生这种情况以及如何让它发挥作用。我非常感谢任何指针(哈!明白了吗?)
【问题讨论】:
-
应该是 strcpy(my_data->string,"Hello";)
-
明白。谢谢!虽然,为什么它在第一个代码 sn-p 中起作用。我本质上是在尝试做同样的事情,只是这一次,数组位于结构内部。这就是让我困惑的地方
-
@swap_1712 检查下面我的答案以消除您的困惑。希望你现在明白了。
标签: c arrays pointers structure