赋值在没有强制转换的情况下从指针生成整数[-Wint-conversion]

时间:2016-02-17 23:17:57

标签: c

我是c的新手,我正在尝试制作一个简单的代码,其中我用*字符替换输入的元音...我遇到了数组的麻烦(我主要熟悉python只使用c现在。)

#include <stdio.h>

 char* main() {
 int c;
 char* vowels[] = {'a', 'e', 'i', 'o', 'u'};

 while( 1 ) {   // means: true
  c = getchar();
  if(c == EOF) break;
  if(c = vowels) putchar('*'); 
  else putchar(c);
}
}

我一直收到同样的错误信息:novowels.c:5:41:注意:(接近初始化'元音[4]') novowels.c:10:12:警告:赋值在没有强制转换的情况下从指针生成整数[-Wint-conversion]        if(c =元音)putchar(&#39; *&#39;);             ^

....请帮助,我无法弄清楚如何完成这个用*替换元音的程序

3 个答案:

答案 0 :(得分:2)

首先,char *main()在C中是非法的。它应该是int main()

其次,'a'等在C中是整数常量。您不能使用它们来初始化char *元素和数组。如果你想要一个char数组,你应该将它声明为

const char vowels[] = {'a', 'e', 'i', 'o', 'u'};

如果你想要一个字符串数组,你应该将它声明为

const char *const vowels[] = {"a", "e", "i", "o", "u"};

最后,c = vowels完全不清楚你想说的是什么。如果您想检查c是否在vowels数组中,请记住,没有核心语言功能可以为您(当然不是=运算符)。您必须手动执行检查或使用适用的库功能。

例如,检查它的一种可能方法是

const char vowels[] = {'a', 'e', 'i', 'o', 'u'};
...
if (memchr(vowels, c, sizeof vowels) != NULL)
  putchar('*');

或者,它可以表示为

const char *const vowels = "aeiou";
...
if (strchr(vowels, c) != NULL)
  putchar('*');

答案 1 :(得分:0)

首先,您的程序包含拼写错误。 ==是比较,而=是分配。而不是这一行

if(c = vowels) putchar('*');
你可能想写

if(c == vowels) putchar('*');

但即使这是不正确的。您无法使用==运算符来测试成员资格。要测试成员资格,您可以使用strchr()中的<string.h>函数:

if (memchr(vowels, c, sizeof vowels) != NULL) putchar('*');

您可以阅读here关于memchr的内容。

最后,正如AnT已经注明,main不应该返回char*main函数必须在严格符合C的程序中返回int。改变行

char* main() {

int main() {

解决这个问题。

答案 2 :(得分:0)

问题是你没有比较c = vowels中的任何内容。您正在为c分配数组vowels的地址(确实是指针)。

可能你想检查c和其中一个元音之间的相等性,但你必须使用[]运算符,因为vowels是一个数组,一个索引和一个不同的运算符(比较,即{ {1}})。类似的东西:

==

但元音应该是if (c == vowels[2]) 而不是char[]