#include <stdio.h>
void add_element(char object[20], int price);
struct linked_list {
char object[20];
int price;
struct shopping_list *next;
};
struct linked_list list = {"car", 15000, NULL};
struct linked_list *last = &list;
int main() {
add_element("snake", 340);
printf("%s", list.object);
return 0;
}
void add_element(char object[20], int price) {
struct linked_list new_element = {object, price, NULL};
}
ERROR:
警告:初始化从指针生成整数而没有强制转换[默认启用]
struct linked_list new_element = {object, price, NULL};
如果我直接将“snake”传递给struct linked_list new_element它可以工作,但传递对象则不行。
答案 0 :(得分:4)
您正尝试使用指针初始化数组。这会尝试将指针转换为char
并使用它初始化第一个元素,因此错误 1 。
此片段应如下所示:
struct linked_list new_element = { .price = price };
memcpy(new_element.object, object, sizeof new_element.object);
1-这应该是一个错误,但似乎只是因为非标准扩展而产生警告。 GCC和Clang都接受-Wall -Wextra -Wfatal-errors -pedantic-errors
作为一个相当强大的标志来捕捉这些。