【问题标题】:incompatible pointer to integer although using char of arrays尽管使用数组的字符,但指向整数的指针不兼容
【发布时间】:2013-11-10 18:25:27
【问题描述】:

我是 C 编程领域的新手,我正在尝试编写一个原始的、基于终端的“Hangman”游戏版本。

执行此操作的步骤之一(或至少我正在处理的方式)是创建第二个 char 数组(在存储需要猜测的单词的原始 char 数组旁边),用“*”填充对于原始数组的每个 Char,并显示它。虽然剩下的编程部分还没有完成(因为我还没有完成它),但我怀疑它现在是否相关(但是我已经知道如何继续,也就是说,如果我没有被一些错误困扰 -消息)....

这是我目前的代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

void hiddenArray(char array[]);

char *secretWord;
char *arrayCover;
char letter;

int main(int argc, char *argv[]){

secretWord = "Test";

printf("Welcome to the Hangman!\n\n");

hiddenArray(secretWord);
printf("What is the hidden Word?: %c\n", *arrayCover);  

printf("Guess a letter\n");
scanf("%c", &letter); 


}

void hiddenArray(char array[]){

int size,i;
size = sizeof(*array);

for (i=0;i<size-1;i++){
    *(arrayCover+i) = "*";
}
}

现在我有两个问题……第一个: 我不明白编译后收到的错误消息:

pendu.c:41:19: warning: incompatible pointer to integer conversion assigning to 'char' from 'char [2]' [-Wint-conversion]
            *(arrayCover+i) = "*";
                            ^ ~~~
1 warning generated.

我的第二个问题:创建的第二个数组,用“*”填充没有显示,我做错了什么?

我很想得到一些帮助,干杯!

【问题讨论】:

  • 这个程序有太多错误(分段):(

标签: c arrays pointers printf


【解决方案1】:

您的程序有一些错误需要纠正。

1) 您的*arraycover 指向某个未知值,您尚未对其进行初始化。

2) sizeof(*array) 应该是 sizeof(array)

3) *(arrayCover+i) = "*" 应该是*(arrayCover+i) = '*'

我建议你在不需要的时候不要创建太多的全局变量

创建char secretWord[100] = "Test" 而不是char *secretWord

【讨论】:

  • 实际上 sizeof(array) 会在数组函数参数上抛出警告 sizeof 将返回大小为 'char *' 而不是 'char []' ,而使用 sizeof(*array) 有效
【解决方案2】:

试试这个

size = sizeof(arrayCover)/sizeof(char);

for (i=0;i<size-1;i++){
    *(array+i) = '*';
}

尽管如此,我认为你需要为arrayCover分配内存

arrayCover = malloc(sizeof(char) * number_of_elements);

【讨论】:

  • 是的!谢谢,我不明白为什么我忘记分配内存......而且确实,'*' 很明显,再次,新手错误。谢谢!
  • ... 现在讨论不同的主题,但是用 '' 填充的数组无法正确显示,因为每个 '' 的输出都是一个 '?';这只是“*”前面缺少的格式问题/令牌吗?
  • 嗯。老实说,你的程序有很多问题。先告诉我这两行printf("What is the hidden Word?: %c\n", *arrayCover); printf("Guess a letter\n"); scanf("%c", &amp;letter); 在你的程序中做了什么?
  • 第一个显示单词,每个字符都替换为''-而每次都会猜到一个字母,在猜到的字母位置对应的'' (如果它在单词中)将被终端输入字母替换(因此 printf(猜一个字母)和 scanf 将当前输入绑定到一个变量,一旦我编码循环比较字母到每个单词的元素,并用字母替换原始数组中出现的隐藏数组位置中的“*”)
  • 好的。你能给我一个输入和预期输出的例子吗?
【解决方案3】:

"*" 是一个字符串。请改用'*' 来获取字符。

【讨论】:

  • 那么size = sizeof(*array); for (i=0;i&lt;size-1;i++){//..} 呢?
【解决方案4】:

"*" 是一个字符串,其中还包含\0,结果为 2 个字符。而是使用 '*' 这只是一个字符。

函数hiddenArray有形式参数array需要在本地使用,而不是arrayCover,如下所示,

void hiddenArray(char array[]){
   int size,i;
   size = sizeof(array)/sizeof(array[0]);
   for (i=0;i<size-1;i++){
         *(array+i) = '*'; /* Or array[i] = '*' */
   }
}

【讨论】:

    猜你喜欢
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-16
    • 1970-01-01
    • 2020-10-11
    • 1970-01-01
    • 2021-01-04
    相关资源
    最近更新 更多