我正在尝试将名称数组复制到另一个数组并打印出来
#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;
^
我该如何解决?
答案 0 :(得分:2)
您可以更改:
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]);
}
答案 1 :(得分:2)
您正在尝试将字符串分配给 char ,这由您的错误描述。要将字符串复制到char数组,应使用strcpy()
。
此外,您的new_array
只是一个字符数组,无法区分两个不同的名称。
要使其成为字符串数组,您应该使用2D数组,您可以在其中索引行以获取如下所示的不同字符串
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;
}