警告 - 初始化使得指针来自整数而不进行强制转换

时间:2012-11-09 18:44:12

标签: c compiler-warnings

我发现了类似的问题,但我不认为它们适用于我的具体问题,所以如果他们这样做我很抱歉!

我正在学习C作为第一年的CS学生,并尝试在C中进行测验,但我无法到达任何地方因为每次我尝试编译以查看它是否正常工作时我收到消息“警告:初始化从没有强制转换的整数生成指针。“

我已经解决了所有的语法错误(我认为),但我只是因为我的生活无法解决这个问题。我已经完成了所有的演讲幻灯片,但没有一个能够涵盖这一点。

#include <stdio.h>
#include <scc110.h>

int player1score, player2score;
char* answer1, answer11, answer111, answer2, answer22, answer222;

int geography()
{
  printf ("The first category is geography. Note: Player 1 always goes first.\n");

  char* answer1 = AskForStringAndWait("Player 1: What is the capital of India?");
  if (strcmp(answer1,"New Delhi")==0)
    player1score++;

  char* answer2 = AskForStringAndWait("Player 2: What is the capital of Iran?");
  if (strcmp(answer2,"Tehran")==0)
    player2score++;

  char* answer11 = AskForStringAndWait("Player 1: Name a country that borders France that  isn't Germany, Italy or Spain.");
  if (strcmp(answer11,"Luzembourgh")==0 ||
      strcmp(answer11,"Switzerland")==0 ||
      strcmp(answer11,"Belgium")==0)
    player1score++;

  char* answer22 = AskForStringAndWait("Player 2: Name one of the main British Channel Islands.");
  if (strcmp(answer22,"Guernsey")==0 ||
      strcmp(answer22,"Jersey")==0)
    player2score++;
}

3 个答案:

答案 0 :(得分:3)

您忘记声明AskForStringAndWait功能。

在现代C(过去的C99)中会出现错误,因为C99不允许调用未声明的函数。

在C89 / 90中,这不是错误。当调用未声明的函数时,假定它返回int值。那么,你的

char* answer1 = AskForStringAndWait("Player 1: What is the capital of India?");

被解释为尝试初始化具有char *值的int指针。因此警告。

答案 1 :(得分:0)

您正在取一个整数值并将其转换为指针。 AskForStringAndWait的源代码是什么?我相信你的函数返回一个char,但是你将结果存储在一个char指针(char *)中。另外,您应该注意char answer11char * answer11不等同。虽然它们具有相同的名称,但是一个是全局变量,另一个是函数内部的局部变量。

答案 2 :(得分:0)

char* answer1, answer11, answer111, answer2, answer22, answer222;

在此声明中,answer1char*,其他char类型

但据我认为你已经在

中再次声明了相同的全局变量
int geography() {}  function

因此,当您尝试获取这些指针的值时,您可能会收到警告或错误

所以声明就像这样

char* answer1, *answer11, *answer111, *answer2, *answer22, *answer222;

内部函数不会在char *之前使用answer1,依此类推

只使用这些变量

geography()的返回类型的问题是int,但是你要放入char*