函数返回 Int 而不是 char
Posted
技术标签:
【中文标题】函数返回 Int 而不是 char【英文标题】:Function returns Int rather than char 【发布时间】:2015-03-03 17:28:35 【问题描述】:我正在编写一些练习程序,但在下面的函数挤压中遇到了问题。它按预期返回整数而不是 char 数组。该代码意味着用户首先输入一个字符串,然后输入一个他希望删除的字符。 squeez 函数接收两者并输出一个没有给定字符的字符串。
目前我的函数给出警告: return 从没有强制转换的指针中生成整数 [默认启用]
我知道函数返回类型 'int' b/c 它也显示第二个错误: 格式“%s”需要“char *”类型的参数,但参数 2 的类型为“int”[-Wformat=]
/* Squeeze Function */
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char squeez(char s[], int c)
int i, j;
for (i = j = 0; s[i] != '\0'; i++)
if (s[i] != c)
s[j++] = s[i];
printf("%c %d", s[i], c);
printf("%s", s);
s[j] = '\0';
return s;
int main(void)
int i, c;
char str[10];
for (i = 0; (c = getchar()) != '\n'; ++i)
str[i] = c;
c = getchar();
printf("%s", squeez(str, c));
return EXIT_SUCCESS;
感谢您的任何帮助!
【问题讨论】:
【参考方案1】:您应该将返回类型更改为char *
:
char *squeez(char s[], int c)
…
return s;
…因为s
是一个指针(字符串第一个字符的地址)。
第二个问题是squeez()
寻找一个'\0'
终结符,但你从来没有在那里写过。第三个问题是您可能会溢出 10 字节缓冲区。 main()
中的循环应该更像
#include <assert.h>
int main(void)
int i;
char str[10];
for (i = 0; i < sizeof(str) - 1; i++)
if ((str[i] = getchar()) == '\n')
break;
assert( (i == sizeof(str) - 1) || (str[i] == '\n') );
str[i] = '\0';
printf("%s", squeez(str, getchar()));
【讨论】:
你能简单解释一下区别吗? 当您说 return s 时,编译器将返回指向字符串 s 的指针,而不是字符串本身。但是您的函数期望返回类型为 char,因此它将 char 指针转换为 char。更改返回类型将解决问题。【参考方案2】:您实际上是在返回一个 char 指针。所以函数的返回类型应该是char *
。
【讨论】:
【参考方案3】:你必须返回字符指针。将返回的char
更改为char *
。
如果您使用的是字符,那么它将被视为单个字符。因此,当您使用 char
时,您只能返回字符。像这样。
return s[0]; or else a character variable.
【讨论】:
以上是关于函数返回 Int 而不是 char的主要内容,如果未能解决你的问题,请参考以下文章