【问题标题】:Warning - Initialization makes pointer from integer without a cast警告 - 初始化使指针从整数而不进行强制转换
【发布时间】:2012-10-30 03:00:58
【问题描述】:

我发现了类似的问题,但我认为它们不适用于我的具体问题,如果有,我很抱歉!

我作为 CS 一年级学生正在学习 C,并尝试用 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++;
}

【问题讨论】:

  • 使用前需要先声明函数
  • 而在你的全局声明中,只有answer1char*,其他都是普通的char
  • 请注意,您的全局变量answer1 等在函数geography() 中被局部变量所遮蔽。这常常导致混乱。在这种情况下,摆脱全局变量。

标签: c compiler-warnings


【解决方案1】:

你忘了声明AskForStringAndWait函数。

在现代 C(过去的 C99)中,这将是一个错误,因为 C99 不允许调用未声明的函数。

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

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

被解释为尝试使用int 值初始化char * 指针。因此发出警告。

【讨论】:

    【解决方案2】:
    char* answer1, answer11, answer111, answer2, answer22, answer222;
    

    在这个声明中answer1char*,其他的只有char类型

    但据我所知,您在

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

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

    所以这样声明

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

    并且内部函数不要在answer1之前使用char *等等

    只需使用这些变量

    geography() 的返回类型也是int 的问题,但您正在输入char*

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2013-09-07
        • 2011-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多