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

时间:2015-12-29 11:52:21

标签: c string function pointers

    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;   
  }

我致电&#39;添加&#39;来自&#39; main&#39;打印这些东西,然后我打电话给&#39;功能&#39;给我回复usern字符串,但出了点问题。

我在编译时遇到错误:

  

[警告]初始化使得指针来自整数而没有强制转换 - &gt; const char * pass1 = function(usern);
  [错误]冲突的类型   &#39;功能&#39; - &GT; const char * function(char usern [50])

2 个答案:

答案 0 :(得分:5)

您看到的错误消息是由于在使用之前未声明函数function 而导致的。因此,编译器隐式声明了int作为function的默认类型的原型。但function的实际返回类型与隐式int类型冲突。所以你得到那些错误。

请注意,此隐式int规则不再有效,因为自C99以来它已被删除。这曾经是C89 / C90中的情况。

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

const char *function (char *);

答案 1 :(得分:0)

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

这是因为没有采用字符数组的深层复制

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

在C中执行的正常操作是malloc一个新字符串,返回指向它的指针。不要忘记在某个时候致电free