With the printf statement printf("new s3 string (in locate function) is \\"%s\\" \\n",s3)
, code works properly
but when printf("new s3 string (in locate function) is \\"%s\\" \\n",s3)
is commented, the code returns null
how is printf
affecting the return
value?
#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
goes out of scope (it leaves the function it was created in), so it has undefined behavior either way. You need to either create s3
in main
and pass it in as another parameter, or use heap allocation via malloc()
which is managed by the OS.
Your code returns the pointer to the local variable s3
. Declared as such, it goes out of scope (gets released from stack memory) on return
; when programmer neglects it, it's a common "generator" of program's undefined behavior. Two solutions are possible:
static char s3[100]
Please, also see this related SO post .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.