求指教指针问题,字符串的插入

JianDan808 2017-02-07 08:39:37
我按照一本书上的代码编辑了以下代码,但是总是输出乱码,请各位大神指点一二
功能就是用将B字符串插入到A字符串中。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *myInsert(char *s,char *q, int n){
int i = 0;
char *str2,strcp[50];
str2 = strcp;
for(i = 0; *s != '\0';i++){
if(i == n-1){
for( ; *q!='\0';){
str2[i] = *q;
i++;
q++;
}
}
str2[i] = *s;
s++;
}
str2[i+1] = '\0';
return str2;

}
//字符串插入
int main()
{
char *strin, *str, *st;
int i;
str = "Hello,world!";
strin = "pig";

printf("输入插入的位置:");
scanf("%d",&i);

st = myInsert(str, strin, i);
puts(st);

return 0;
}



控制台输出如图

...全文
92 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2017-02-08
  • 打赏
  • 举报
回复
栈中的变量通常包括函数参数和函数里声明的临时变量。 栈中的基本变量退出其作用域时,没有谁执行一段代码去释放/销毁/析构它所占用的内存,仅仅是没人再去理会的留在当前栈顶上方的若干遗留下来可被后续压栈操作覆盖的无用数据而已。 而栈中的类变量退出其作用域时,会自动执行其析构函数,……
自信男孩 2017-02-08
  • 打赏
  • 举报
回复
strcp是局部变量,在函数myInsert调用结束后,该数组就会自动释放。在main函数栈里没有意义了。 把strcp定义成static则该变量的生命周期就发生了变化因为其存放在数据段(生命周期是整个程序),不是随着myInsert函数栈的结束而释放,而是等待程序运行结束而释放。 也可以把strcp定义成全局的变量,原理是类似的,主要是变量的生命周期变成了整个程序。
ipqtjmqj 2017-02-07
  • 打赏
  • 举报
回复
引用 2 楼 JianDan808 的回复:
[quote=引用 1 楼 ipqtjmqj 的回复:] strcp改成static
十分感谢,运行成功,是因为局部变量执行结束后被内存空间被释放的原因吗[/quote] 对的。默认都是在栈上,函数返回就自动释放了。
真相重于对错 2017-02-07
  • 打赏
  • 举报
回复
改成static ,难道那个局部变量还要保存状态吗?
引用 1 楼 ipqtjmqj 的回复:
strcp改成static
程序改成如下,试一下? #include <stdio.h> #include <stdlib.h> #include <string.h> char *myInsert(char *s,char *q, int n){ int i = 0; char *str2; static char strcp[50]; str2 = strcp; for(i = 0; *s != '\0';i++){ if(i == n-1){ for( ; *q!='\0';){ str2[i] = *q; i++; q++; } } str2[i] = *s; s++; } str2[i+1] = '\0'; return str2; } //字符串插入 int main() { char *strin, *str, *st,*st1; int i; str = "Hello,world!"; strin = "pig"; st = myInsert(str, strin, 3); puts(st); st = myInsert(str,strin,3); puts(st1); return 0; }
JianDan808 2017-02-07
  • 打赏
  • 举报
回复
引用 1 楼 ipqtjmqj 的回复:
strcp改成static
十分感谢,运行成功,是因为局部变量执行结束后被内存空间被释放的原因吗
ipqtjmqj 2017-02-07
  • 打赏
  • 举报
回复
strcp改成static

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧