跪求指教:段错误(吐核)问题!

凌兵 2011-09-01 09:08:02
我是新手,刚学指针,写了个程序,gcc编译没问题生成了可执行文件,用./name执行时出现段错误(吐核)。狠不懂,是不是指针指向的内存地址有问题还是什么。
本人c语言不是很好,程序如下:(跪求高手对各方面进行指教,批判,新手要在唾液里成长,谢谢!!)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int merge(char *,char *)

int main(char argc,char *argv)
{

char str1[20]={"Hello"};
char str2[20]={"World"};

merge(str1,str2);

return 0;

}
int merge(char *s1,char *s2)
{
char *str;
int size,i;

while(s1 !='\0')
s1++;
while(s2 !='\0')
{
*(s1++)=*(s2++);
}

size = strlen(s1);

str = (char *)malloc(size+1);

for(i=0;i<size;i++)

str[i] = s1[i];

str[i+1]=' ';

printf("%s\n",str);

free(str);


}
...全文
3326 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
ymy1248227142 2011-12-26
  • 打赏
  • 举报
回复
我的也吐核。。。
程序员小迷 2011-09-01
  • 打赏
  • 举报
回复
这个遇到过,
while(s1 !='\0')


应该是:
按照代码的意思,应该是while(*s1 != '\0')吧
凌兵 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 liuxingjiaofu 的回复:]
指针的一个非常重要的需要注意的地方:malloc了一定要free;new了一定要delete,最好是在哪个函数申请了就在哪个函数里释放
别忘加分啊,哈哈
[/Quote]
我刚玩这个,怎么加分啊。 - - !
  • 打赏
  • 举报
回复
指针的一个非常重要的需要注意的地方:malloc了一定要free;new了一定要delete,最好是在哪个函数申请了就在哪个函数里释放
别忘加分啊,哈哈
凌兵 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuxingjiaofu 的回复:]
while(s1 !='\0')
和随后的while(s2……)
应该是*s1,*s2
你判断的是指针所指字符的值,而非指针,指针永远不等于'\0'
[/Quote]
不错,正解。指针不是很熟,经常出错。
凌兵 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 ilyz5609 的回复:]
顶楼上的
[/Quote]
求指点,别光顶啊!
断问天 2011-09-01
  • 打赏
  • 举报
回复
顶楼上的
凌兵 2011-09-01
  • 打赏
  • 举报
回复
我现在在linux下学习的,用的是gcc。ls的程序不错。还有就是c中有什么要注意的,特别是指针。
ningto.com 2011-09-01
  • 打赏
  • 举报
回复
上面getchar();可以去掉,我是在vs里调式的
ningto.com 2011-09-01
  • 打赏
  • 举报
回复
str[i]='\0'; // 应该是'\0', i在for循环里面已经+1了,所以这里是i
ningto.com 2011-09-01
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int merge(char *,char *);

int main(char argc,char *argv)
{

char str1[20]={"Hello"};
char str2[20]={"World"};

merge(str1,str2);

return 0;

}
int merge(char *s1,char *s2)
{
char *s3 = s1;
char *str;
int size,i;

while(*s1 !='\0') // lost *
s1++;
while(*s2 !='\0') // lost *
{
*(s1++)=*(s2++);
}

size = strlen(s3); // s1的所指的位置已经变了,所以要先用s3保存起始位置

str = (char *)malloc(size+1);

for(i=0;i<size;i++)

str[i] = s3[i]; // 换成s3有起始位置开始

str[i]='\0'; // 应该是'\0'

printf("%s\n",str);

free(str);
getchar();

return 0;
}
Athenacle_ 2011-09-01
  • 打赏
  • 举报
回复
问题ls都说了。。

我PS句:这个吐核是翻译有错误。应该是核心已转储:core dumped
yiyefangzhou24 2011-09-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liuxingjiaofu 的回复:]

int merge(char *s1,char *s2) 函数体的最后加个return 0;
[/Quote]+你这段程序在vc下就会报错,int函数应该有返回值
  • 打赏
  • 举报
回复
while(s1 !='\0')
和随后的while(s2……)
应该是*s1,*s2
你判断的是指针所指字符的值,而非指针,指针永远不等于'\0'
  • 打赏
  • 举报
回复
int merge(char *s1,char *s2) 函数体的最后加个return 0;
  • 打赏
  • 举报
回复
int merge(char *,char *) 后加个分号;
Free_无影 2011-09-01
  • 打赏
  • 举报
回复
主要还是指针问题。。顶一下~~~

70,020

社区成员

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

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