函数返回Int而不是char

时间:2015-01-06 04:17:24

标签: c function return-value

我正在研究一些练习程序,并且在下面的函数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;
}

感谢您的任何和所有帮助!

3 个答案:

答案 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.