繁体   English   中英

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

[英]how does printf change the return value of a function?

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

s3超出范围(它保留了创建它的功能),因此无论哪种方式它都具有未定义的行为。 您需要在main创建s3并将其作为另一个参数传递,或者通过操作系统管理的malloc()使用堆分配。

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

  1. 如另一个答案中所建议的那样,动态分配(然后释放)变量。
  2. 通过声明变量static char s3[100]修改变量的存储持续时间

请也请参阅此相关的SO post

暂无
暂无

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

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