簡體   English   中英

將結構數組復制到 C 中的另一個(非結構)數組

[英]copy a struct array to another (not struct) array in C

我正在嘗試將名稱數組復制到另一個數組並打印它

#include <stdio.h>

typedef struct 
{
    char name[100];
    int age;
} data; 

int main() {
    char new_array[100];
    data people[] = {{ "john", 12},{" kate", 15}};
    for(int i =0; i < sizeof(people); i++) {
        new_array[i] = people[i].name;
        printf("%c ", new_array[i]);
    }

    return 0;
}

但它給了我一個錯誤:

error: assignment to ‘char’ from ‘char *’ makes integer from pointer without a cast [-Werror=int-conversion]
     new_array[i] = people[i].name;
                  ^

我該如何解決?

你可以改變:

char new_array[100];

至:

char new_array[10][100]; // for maximum 10 strings

然后使用strcpy復制 c 中的字符串。 如果要計算數組的元素數,請使用:

sizeof(people)/sizeof(people[0]);

那么,for循環就變成了:

for(int i =0; i < sizeof(people)/sizeof(people[0]); i++) {
        strcpy(new_array[i],people[i].name);
        printf("%s ", new_array[i]);
}

您正在嘗試將字符串分配給錯誤描述的字符 要將字符串復制到 char 數組,您應該使用strcpy()

此外,您的new_array只是一個字符數組,無法區分兩個不同的名稱。

要使其成為字符串數組,您應該使用二維數組,您可以在其中索引行以獲取不同的字符串,如下所示

char new_array[10][100]

這將創建一個由 10 個字符串組成的數組,每個字符串包含 100 個字符。

此外,您對結構數組的迭代很混亂。

要獲得正確大小的結構數組,您應該使用

int size = sizeof(people)/sizeof(people[0])

因此,您的最終代碼變為-

#include <stdio.h>
#include <string.h>

typedef struct 
{
    char name[100];
    int age;
} data; 

int main() {
    char new_array[10][100];
    data people[] = {{ "john", 12},{" kate", 15}};
    for(int i =0; i < sizeof(people)/sizeof(people[0]); i++) {
        strcpy(new_array[i],people[i].name);
        printf("%s ", new_array[i]);
    }

    return 0;
}

暫無
暫無

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

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