使用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;
}
答案 0 :(得分:8)
main
超出了范围(它留下了创建的函数),因此无论如何都有未定义的行为。您需要在malloc()
中创建UITableViewDelegate
并将其作为另一个参数传递,或者通过操作系统管理的tableView(_:shouldHighlightRowAt:)
使用堆分配。
答案 1 :(得分:1)
您的代码返回指向局部变量s3
的指针。如此声明,它超出范围(从堆栈内存中释放)return
;当程序员忽略它时,它是程序未定义行为的常见“生成器”。有两种解决方案可供选择:
另请参阅此related SO post。