恶魔的摆渡 发表于 2021-1-15 10:30:18

c语言的一个函数不能正常运行

#include<stdio.h>
#include<string.h>

char getword(char c);
char getword(char c)
{
   
    switch (c)
    {
      case 'a': return "apple";
      case 'b': return "banana";
      default: return "None";
    }
}
int main(void)

{

    char input;
    printf("请输入一个字符:");
    scanf("%c",&input);
    printf("%s\n",getword(input));
    return 0;
}
为什么输入a后没反应?(希望能讲的通俗易懂,谢谢啦{:10_254:} )

jackz007 发表于 2021-1-15 10:30:19

本帖最后由 jackz007 于 2021-1-15 12:37 编辑

      这个程序有个致命的缺陷,就是返回的字符串属于函数中的局部变量
      case 'a': return "apple";
      case 'b': return "banana" ;
      default: return "None"    ;
      返回的字符串占用函数 getword() 局部变量的内存,这些局部变量只在函数被调用期间才会存在,一旦调用结束,这些内存会被立即释放,会被操作系统立即挪作它用,所以,绝对不可以这么做!
      如果一定要返回字符串,那么,用于保存字符串的变量必须属于调用函数或全局变量。
#include<stdio.h>
#include<string.h>

char * getword(char s[] , char c)
{
   
      switch (c) {
                case 'a': strcpy(s , "apple") ; break;
                case 'b': strcpy(s , "banana") ; break ;
                default : strcpy(s , "None") ; break   ;
      }
      return s                                       ;
}

int main(void)
{
      char s , input               ;
      printf("请输入一个字符:")         ;
      scanf("%c",& input)                ;
      printf("%s\n",getword(s , input));
}

心驰神往 发表于 2021-1-15 10:45:22

不如把悬赏去掉

风过无痕1989 发表于 2021-1-15 11:03:33

你这一个鱼币的悬赏,还不如普通求助你选个最佳答案,系统给予的奖励,鱼币+3,荣誉+2,技术+1,而悬赏帖子选为最佳答案,除得到你的悬赏 1 鱼币外,什么都没有了。谁会来回答你的问题?

改为普通求助后,你无须任何付出,这一个鱼币都省了

wp231957 发表于 2021-1-15 11:22:35

错误有些多,多看看别人的代码,或者补充一下基础知识

心驰神往 发表于 2021-1-15 11:25:54

建议改成普通求助帖

JiuChorYuen 发表于 2021-1-16 11:07:59

char *getword(char c);
char *getword(char c)

心驰神往 发表于 2021-1-16 11:10:19

JiuChorYuen 发表于 2021-1-16 11:07
char *getword(char c);
char *getword(char c)

同意{:10_256:}

guard99 发表于 2021-1-16 14:21:43

你这个返回的是字符串,并且还是字符串常量,因此把函数改成
const char * getword(char c)
你试试
页: [1]
查看完整版本: c语言的一个函数不能正常运行