我正在研究一些练习程序,并且在下面的函数squeez中遇到了问题。它按预期返回整数而不是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;
}
感谢您的任何和所有帮助!
答案 0 :(得分:4)
您应该将返回类型更改为char *
:
char *squeez(char s[], int c) {
…
return s;
}
...因为s
是一个指针(字符串第一个字符的地址)。
第二个问题是squeez()
寻找'\0'
终结符,但你从未在那里写过。{1}}。第三个问题是您可能会溢出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()));
}
答案 1 :(得分:0)
您实际上正在返回一个字符指针。所以函数的返回类型应该是char *
。
答案 2 :(得分:0)
您必须返回字符指针。将返回的char
更改为char *
。
如果您使用的是char,则将其作为单个字符。因此,当您使用char
时,您只能返回角色。像这样。
return s[0]; or else a character variable.