函数返回 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的主要内容,如果未能解决你的问题,请参考以下文章

怎么把int转换为char类型

为啥 Hex() 函数返回一个字符串而不是一个 int hex?

在 C# 中将 char 转换为 int

SQL 用户定义函数返回 0 而不是浮点数

我的列表中的打印函数返回 int 值而不是列表中的字符串

C语言 返回指针的函数--指针函数 int* max(int a)