C 为什么我会得到;赋值从整数生成指针而不使用强制转换“?”;?

C 为什么我会得到;赋值从整数生成指针而不使用强制转换“?”;?,c,arrays,pointers,C,Arrays,Pointers,可能重复: 我现在正在学习C语言,并且有点挣扎。我正在制作一个程序,通过一系列问题循环并填充一系列答案。我不断收到以下警告: /var/Cprograms/quiz.c|24|warning: assignment makes pointer from integer without a cast [enabled by default]| 我仍在努力掌握指针的用法,我可能完全错误地使用了指针,但这就是我来这里学习的原因。因此,我需要在第24行帮助我找出我做错了什么,以便让程序工作,并最终

可能重复:

我现在正在学习C语言,并且有点挣扎。我正在制作一个程序,通过一系列问题循环并填充一系列答案。我不断收到以下警告:

/var/Cprograms/quiz.c|24|warning: assignment makes pointer from integer without a cast [enabled by default]|
我仍在努力掌握指针的用法,我可能完全错误地使用了指针,但这就是我来这里学习的原因。因此,我需要在第24行帮助我找出我做错了什么,以便让程序工作,并最终让它打印出答案。这是到目前为止的代码

#include <stdio.h>

/*
Yes or no Question Quiz:
get answers from command prompt
and print answers at end of session
using pointers
*/

/* char *gets(char *s) */

void loopQuiz (void)
 {
     char *questions[] = {"Is true == true?", "Is 0 == 1?", "Does water have atleast 3 phases?", "Is C a programming language?"};
     char *answers[3];


     int i = 0;
     int count = sizeof(questions) / sizeof(int);

     do
      {
          printf("%s \n", questions[i]);
          answers[i] = getchar();
          i++;
      }
     while (i < count);

    /*print function to go here*/
 }



int main (void)
 {
     loopQuiz();
     return 0;
 }
#包括
/*
是或否问题测验:
从命令提示符获取答案
并在课程结束时打印答案
使用指针
*/
/*char*get(char*s)*/
void循环测验(void)
{
char*questions[]={“Is true==true?”,“Is 0==1?”,“water至少有3个阶段吗?”,“C是编程语言吗?”;
char*答案[3];
int i=0;
int count=sizeof(问题)/sizeof(int);
做
{
printf(“%s\n”,问题[i]);
答案[i]=getchar();
i++;
}
而(i
answers
是指向char的3个指针的数组

answers[i] = getchar();
尝试将int赋值给
答案[i]
。你的类型不对
getchar
返回一个转换为int的
unsigned char
(除非你点击
EOF
),所以你想要的是

char answers[3];
(你欠我一笔捐款,让我数到你代码的第24行…)

问题出在这一行:

answers[i] = getchar();
由于
answers
是一个
char*
数组,但是您将
int
(getchar()
的返回值)分配给它的一个成员,因此这是一个无效的分配。我不明白你期望这能做什么,但这肯定是错误的。您需要将
char*
分配给
answers[i]

answers[i] = getchar();
getchar()
返回一个
int
,但是

char *answers[3];

answers
被声明为指针数组,因此,正如错误消息所说,您正在为指针赋值一个整数,而无需强制转换。

以后,请确保您的问题标题不太通用。人们通常会寻找他们知道如何解决的问题,如果标题告诉你问题是什么,这会更容易做到。请不要“修复”示例代码中的错误。发现一个被编辑掉的错误真的很难。哎呀,你认为在你问之前可以搜索一下吗?这里唯一的问题是知道要选择无数重复项中的哪一个。它们可能意味着将答案设置为一个字符数组(
char answers[3]
),但是仍然存在将int分配给char的问题。@BrendanLong您可以将
int
分配给
char
(因为它们都是整数类型)只要
int
的值适合
char
。当
getchar()返回
int
时,总是出现这种情况
而且它不是
EOF
@BrendanLong:getchar的文档统计它返回一个
无符号字符
转换成
int
@FrancisBailey No.
字符
在C中通常被视为
int
。习惯它。@FrancisBailey这是因为你给它赋值了变量,但你没有对结果做任何事。一旦你开始做任何你打算用它做的事情,这个警告就会消失。
char *answers[3];