函数 returns Int 而不是 char
Function returns Int rather than char
我正在编写一些练习程序,但在下面的函数 squeez 中遇到了问题。它是 returning 一个整数而不是预期的 char 数组。该代码意味着用户首先输入一个字符串,然后是他希望删除的字符。 squeez 函数接收两者并输出没有给定字符的字符串。
目前我的函数发出警告:
return 从指针生成整数而不进行转换 [默认启用]
我知道函数是 returning 类型 '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] != '[=11=]'; i++)
{
if (s[i] != c)
{
s[j++] = s[i];
}
printf("%c %d", s[i], c);
}
printf("%s", s);
s[j] = '[=11=]';
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;
}
如有任何帮助,我们将不胜感激!
您应该将 return 类型更改为 char *
:
char *squeez(char s[], int c) {
…
return s;
}
…因为s
是一个指针(字符串第一个字符的地址)。
第二个问题是 squeez()
寻找 '[=15=]'
终止符,但您从未在那里写过终止符。第三个问题是您可能会溢出 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] = '[=11=]';
printf("%s", squeez(str, getchar()));
}
您实际上是在 return 一个字符指针。所以函数的return类型应该是char *
.
你必须return字符指针。将 returning char
更改为 char *
。
如果您使用的是字符,那么它将被视为单个字符。因此,当您使用 char
时,您只能 return 该字符。像这样。
return s[0]; or else a character variable.
我正在编写一些练习程序,但在下面的函数 squeez 中遇到了问题。它是 returning 一个整数而不是预期的 char 数组。该代码意味着用户首先输入一个字符串,然后是他希望删除的字符。 squeez 函数接收两者并输出没有给定字符的字符串。
目前我的函数发出警告:
return 从指针生成整数而不进行转换 [默认启用]
我知道函数是 returning 类型 '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] != '[=11=]'; i++)
{
if (s[i] != c)
{
s[j++] = s[i];
}
printf("%c %d", s[i], c);
}
printf("%s", s);
s[j] = '[=11=]';
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;
}
如有任何帮助,我们将不胜感激!
您应该将 return 类型更改为 char *
:
char *squeez(char s[], int c) {
…
return s;
}
…因为s
是一个指针(字符串第一个字符的地址)。
第二个问题是 squeez()
寻找 '[=15=]'
终止符,但您从未在那里写过终止符。第三个问题是您可能会溢出 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] = '[=11=]';
printf("%s", squeez(str, getchar()));
}
您实际上是在 return 一个字符指针。所以函数的return类型应该是char *
.
你必须return字符指针。将 returning char
更改为 char *
。
如果您使用的是字符,那么它将被视为单个字符。因此,当您使用 char
时,您只能 return 该字符。像这样。
return s[0]; or else a character variable.