有人可以解释为啥会出现这个错误吗?
Posted
技术标签:
【中文标题】有人可以解释为啥会出现这个错误吗?【英文标题】:Can someone explain why this error appears?有人可以解释为什么会出现这个错误吗? 【发布时间】:2022-01-10 11:29:27 【问题描述】:出现此警告:
f.c:14:16: warning: incompatible pointer to integer conversion assigning to 'char' from 'char [2]' [-Wint-conversion]
head1 -> data = "K";
^ ~~~
f.c:16:16: warning: incompatible pointer to integer conversion assigning to 'char' from 'char [2]' [-Wint-conversion]
head2 -> data = "a";
^ ~~~
这是代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct _node
char data;
struct _node *link;
node;
int main ()
node *head1 = NULL;
node *head2 = NULL;
head1 = (node *)malloc (sizeof (node));
head2 = (node *)malloc (sizeof (node));
head1 -> data = "K";
head1 -> link = head2;
head2 -> data = "a";
printf("%c%c", head1->data, head2->data);
return 0;
【问题讨论】:
将head1 -> data = "K";
更改为head1 -> data = 'K';
@RichardCritten 看起来这是通常的“让我们也标记它 C++ 以获得更多答案”的问题。错误信息中的文件名是f.c
,所以看起来是个C题。
您是否通过 C++ 编译器运行您的代码?否则请不要标记 C++ 语言。
【参考方案1】:
以下答案假定您需要 C++ 特定的答案。
problem 是 "K"
的类型为 const char[2]
。当你写的时候
head1 -> data = "K";
右侧衰减为const char*
。但请注意,左侧仍然是char
。因此,正如错误所说,您无法将 const char*
转换为 char
。
同样,"a"
的类型为 const char[2]
。当你写的时候
head2 -> data = "a";
右侧衰减为const char*
,但左侧仍为char
。由于我们无法将 const char*
转换为 char
,因此您会收到上述错误。
您可以解决此问题,方法是将head1 -> data = "K";
和head2 -> data = "a";
替换为:
head1 -> data = 'K'; //note single quote around K
head2 -> data = 'a'; //note single quote around a
错误 2
而不是使用malloc
,然后像以前那样取消引用head1
,您应该使用new
,例如:
node *head1 = new node;
node *head2 = new node;
别忘了使用delete
堆上分配的内存。所以修改后的程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
typedef struct _node
char data;
struct _node *link;
node;
int main ()
node *head1 = new node;
node *head2 = new node;
head1 -> data = 'K';
head1 -> link = head2;
head2 -> data = 'a';
std::cout<<head1->data<<" "<<head2->data;
//DONT FORGET TO DELETE
delete head1;
delete head2;
return 0;
【讨论】:
char[2]
数组在任何时候都不会衰减为指针;它仍然是类型为char[2]
的右值。去掉关于衰变的不正确信息,答案是正确的。【参考方案2】:
data
是一个char
变量,使用简单的括号:' '
head1 -> data = "K";
-> 错误
head1 -> data = 'K';
-> 好的
同时使用 new 而不是 malloc,几乎任何事情都不要使用 malloc:
错误:
head1 = (node *)malloc (sizeof (node));
head2 = (node *)malloc (sizeof (node));
好的:
head1 = new Node;
head2 = new Node;
【讨论】:
为什么我不能使用malloc?我可以使用 malloc 来存储整数吗? @Kamol 基本上是因为 malloc 来自 C 而不是 C++ ,所以它有一些不足。即使您可以在 C++ 中使用malloc
,new 也更好。如果您想了解更多详细信息,请查看以下问题:***.com/q/184537/17308658
@Kamol 我刚刚意识到它是一个 C 程序,并且你标记了 C++。不要这样做以获得更多答案。反正我说的new
只适用于C++。以上是关于有人可以解释为啥会出现这个错误吗?的主要内容,如果未能解决你的问题,请参考以下文章