簡體   English   中英

在C結構內部引用數組

[英]Referring an array inside a C structure

我來自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));

最好花一些時間閱讀有關自動內存分配和動態內存分配的信息。

需要使用strcpy()將字符串復制到結構ST_DATA字符串成員中。

strcpy(my_data->string, "Hello");

在必須為結構分配內存之前,

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

編輯:main()中的ST_DATA結構只是一個聲明,它告訴編譯器它具有其類型的成員。 在分配了內存之前如何使用它。 您可以將ST_DATA視為類似於int等任何其他數據類型的數據類型,當未將它們定義為為i獲取內存的int object時,它們沒有任何意義。

ST_DATA *my_data;
my_data->x = 100;

這里的my_data是一個指針,因此首先要為其分配內存。

char string[] = "Hello";

這里為字符串分配了帶有聲明的值,因此可以。 但是在下一個代碼中

my_data->string = "Hello";

這不是好的,因為初始化只能通過聲明來完成。 在聲明字符串值之后,必須使用strcpy()進行賦值

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM