我來自Java背景,並試圖更好地理解C結構,指針和數組。下面是我在擺弄示例代碼:在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中:在函數 '主':
PROG .c:12:18:錯誤:從類型'char *'分配類型'char [8]'時的不兼容類型「
my_data-> string =」Hello「;
我有以下改動嘗試,以及:
一)
my_data->string[] = "Hello";
這將會給我下面的錯誤:
prog.c中:在函數 '主':
prog.c:12:18:錯誤:''''令牌之前的預期表達式
my_data-> string [] =「Hello」;
^
B)
my_data->string[8] = "Hello";
此方法返回運行時錯誤。據推測,當我打印第一個字符時會發生錯誤。
必須有一些我正在做或期望的東西(用於使用C以外的其他語言編碼),但我似乎無法弄清楚爲什麼會發生這種情況以及如何使其工作。我非常感謝任何指針(哈!明白了嗎?)
它應該是strcpy(my_data-> string,「Hello」;) – michaeltang
瞭解。謝謝!儘管如此,它爲什麼會在第一個代碼片段中工作。我本質上是試圖做同樣的事情,只是這次,數組在結構中。那是什麼令我困惑 –
@ swap_1712請在下面檢查我的答案以清除您的困惑。希望你現在明白。 –