printf如何更改函数的返回值?

时间:2016-07-20 18:51:47

标签: c

使用printf语句printf("new s3 string (in locate function) is \"%s\" \n",s3),代码正常运行

但在评论printf("new s3 string (in locate function) is \"%s\" \n",s3)时,代码会返回null

printf如何影响return值?

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

char * locate(char * s1,char * s2,int index) 
{
    printf("s1 string is \"%s\" \n",s1);
    printf("s2 string is \"%s\" \n",s2);

    int i=0,j=0, k;
    char s3[100];    

    while(i<=index)
    {
        s3[i]=s1[i];
        i++;
    }
    k=i;

    while(s2[j]!='\0')
    {
        s3[i]=s2[j];
        i++; j++;
    }

    while(s1[k]!='\0')
    {
        s3[i]=s1[k];
        i++;k++;
    }

    s3[i]='\0';

    //printf("new s3 string (in locate function) is \"%s\" \n",s3);

    return ((char *)s3);
}


int main(void) 
{
    char * s1="my name shwetha";
    char * s2="is ";
    s1=locate(s1,s2,7);

    printf("Final Inserted string S1 is \"%s\" \n",s1);

    return 0;
}

2 个答案:

答案 0 :(得分:8)

main超出了范围(它留下了创建的函数),因此无论如何都有未定义的行为。您需要在malloc()中创建UITableViewDelegate并将其作为另一个参数传递,或者通过操作系统管理的tableView(_:shouldHighlightRowAt:)使用堆分配。

答案 1 :(得分:1)

您的代码返回指向局部变量s3的指针。如此声明,它超出范围(从堆栈内存中释放)return;当程序员忽略它时,它是程序未定义行为的常见“生成器”。有两种解决方案可供选择:

  1. 动态分配(并随后释放)变量,如另一个答案所示。
  2. 通过声明变量[{1}}
  3. 来修改变量的存储持续时间

    另请参阅此related SO post