-3

可能的重复:
赋值从没有强制转换的整数生成
指针赋值从没有强制转换的整数生成指针

我目前正在学习 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;
 }
4

3 回答 3

3
char *answers[3];

answers是一个由 3 个指向 char 的指针组成的数组。

answers[i] = getchar();

尝试将 int 分配给answers[i]. 你的类型是错误的。 getchar返回一个unsigned char转换为 int 的(除非你点击EOF),所以你想要的是......

char answers[3];
于 2012-12-20T20:33:39.597 回答
2

(你欠我一笔捐款,直到你的代码中的第 24 行计数......)

问题出在这一行:

answers[i] = getchar();

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

于 2012-12-20T20:33:40.827 回答
1
answers[i] = getchar();

getchar()返回一个int,但是

char *answers[3];

answers被声明为指针数组,因此您将整数分配给指针而不进行强制转换,正如错误消息所述。

于 2012-12-20T20:34:53.547 回答