赋值从指针生成整数而不强制转换 [-Wint-转换]

  • 本文关键字:转换 -Wint- 指针 整数 赋值 c
  • 更新时间 :
  • 英文 :


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

#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-转换] if(c = 元音) putchar('*'); ^

....请帮忙,我不太清楚如何完成这个用 * 替换元音的程序

首先,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('*');

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

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

你可能想写

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

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

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

您可以在此处阅读有关memchr的作用。

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

char* main() {

int main() {

来解决此问题。

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

可能您想检查 c 和其中一个元音之间的相等性,但您必须使用 [] 运算符,因为vowels是一个数组、一个索引和一个不同的运算符(比较,这是==)。像这样:

if (c == vowels[2])

但是元音应该是char[]而不是char*[].

相关内容

最新更新