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];