[英]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
时超出范围(从堆栈内存中释放)。 当程序员忽略它时,它是程序未定义行为的常见“生成器”。 可能有两种解决方案:
static char s3[100]
修改变量的存储持续时间 请也请参阅此相关的SO post 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.