繁体   English   中英

无法理解如何从C函数返回字符串

[英]cant understand how to return string from function in C

    void add()
    {    
    char name[50], surname[50], usern[50];

    int id, birth, amount;
    printf("Enter your name, surname and your year of birth:\n");
    scanf("%s %s %d", &name, &surname, &birth);
    printf("Enter your ID, username and your total amount:\n");
    scanf("%d %s %d", &id, &usern, &amount);
    const char *pass1=function(usern);  
    }

  const char *function (char usern[50])
  {
    char temp;
    int i=0;
    int j;
    j = strlen(usern) - 1;
    while (i < j) 
    {
      temp = usern[i];
      usern[i] = usern[j];
      usern[j] = temp;
      i++;
      j--;
    }
    return usern;   
  }

我从'main'调用'add'来打印这些内容,然后再调用'function'向我返回usern字符串,但是出了点问题。

编译时出现错误:

[警告]初始化使指针从整数开始而没有强制转换-> const char * pass1 = function(usern);
[错误]'功能'的类型冲突-> const char * function(char usern [50])

您看到的错误消息是由于使用功能function 之前未声明功能function而导致的。 因此,编译器隐式声明一个原型,其中原型intfunction的默认类型。 但是function的实际返回类型与隐式int类型冲突。 这样您会得到那些错误。

请注意,此隐式int规则不再有效,因为自C99起已将其删除。 在C89 / C90中就是这种情况。

解决方案是为其提供原型。 将其添加到源文件的顶部(如果有,则将其包括在头文件中):

const char *function (char *);

function返回有效的生存期与传递给它的参数usern的生存期相同。

这是因为未获取字符数组的深层副本

如果尝试从add返回pass1并使用它,则程序行为将不确定,因为usern超出范围。

正常的事情在这里C是对malloc一个新的字符串,返回一个指针。 不要忘记在某个时候打free电话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM