#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};
}
错误:
warning: initialization makes integer from pointer without a cast [enabled by default]
struct linked_list new_element = {object, price, NULL};
如果我直接将“snake”传递给 struct linked_list new_element 它可以工作,但传递对象则不行。
最佳答案
您正在尝试使用指针初始化数组。这尝试将指针转换为 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
作为一个相当强大的标志设置来捕获这些。
关于C 初始化从指针生成整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44048396/