C语言中如何不用strcat函数实现字符串的连接(作业要求要调用函数)

WeicoYeah 2014-12-27 06:22:12
我编写的代码如下,运行程序时提示运行停止。请问出错在何处?该如何更改?
#include <stdio.h>
int main ()
{
char str1[1000],str2[1000];
char str(char str1[1000],char str2[1000]);
printf("请输入字符串1:");
gets(str1);
printf("请输入字符串2:");
gets(str2);
str(str1,str2);
printf("连接后的字符串为:%s",str1);
return 0;
}

char str(char str1[1000],char str2[1000])
{
int i,j;
for(i=0;str1[i]!='\0';i++)

for(j=0;str2[j]!='\0';j++)
str1[i+j]=str2[j];
}
...全文
8968 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fly_dragon_fly 2015-01-07
  • 打赏
  • 举报
回复
拷完就可以了

void cat_str(char *left,const char *right)
{
    for(;*left;++left);
    while(*left++ = *right++);
}
wenyujian1995 2015-01-06
  • 打赏
  • 举报
回复
新手学习一下,最近频繁接触字符串,这种加一加二之类的实在是太常见的 错误了。。。
此后三年 2015-01-06
  • 打赏
  • 举报
回复
前3楼的做法都可以, 就是要把数组搞大一点, 避免下标越界, 不得不说一下的是,二楼的函数参数,void strcmpmyself(char str1[1000],char str2[1000]) , 写成这样完全是哪来迷惑别人, 这样写和和char * str1, char * str2有啥区别。。。
zjx8613 2015-01-06
  • 打赏
  • 举报
回复
上面1#和2#是否考虑越界问题?如果越界了,是否还正确
flexman09 2015-01-01
  • 打赏
  • 举报
回复
不错,我就是用具体的数据代进去算的
引用 5 楼 zhao4zhong1 的回复:
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
赵4老师 2014-12-29
  • 打赏
  • 举报
回复
“多一少一”问题占程序员常犯错误的10%以上! 避免“多一少一”问题的方法之一是将比如<10甚至<5的数代入程序片断,搬手指头心算验证一下程序到底应该写为 x、x-1、x+1中的哪个? <、<=、==、>、>=中的哪个?
程序员龙湫 2014-12-28
  • 打赏
  • 举报
回复
字串+数组尾巴/0最容易丢了
南边风景好 2014-12-28
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
	int offset = 0;
	char str1[128] = {0};
	char str2[128] = {0};
	char str[128] = {0};

	printf("input first str\n");
	scanf("%s",str1);
	printf("input second str\n");
	scanf("%s",str2);
	offset += sprintf(&str[offset],"%s",str1);
	offset += sprintf(&str[offset],"%s",str2);
	printf("%s\n",str);

	return 0;
}
707wk 2014-12-27
  • 打赏
  • 举报
回复
这真是一个悲伤的故事
#include <stdio.h>

void strcmpmyself(char str1[1000],char str2[1000])
{
    int i,j ;
    for(i=0;str1[i]!='\0';i++);
    
    for(j=0;str2[j]!='\0';j++)
    	str1[i+j]=str2[j];
}

int main()
{
    char str1[1000],str2[1000];
    printf("请输入字符串1:");
    gets(str1);
    printf("请输入字符串2:");
    gets(str2);
    strcmpmyself(str1,str2);
    printf("连接后的字符串为:%s",str1);
    return 0 ;
}
「已注销」 2014-12-27
  • 打赏
  • 举报
回复
字符串的结尾'\0'被你丢弃了,
/*************************************************************************
    > File Name: main3.c
    > Author: jukay
    > Mail: hellojukay@163.com 
    > Created Time: 2014年12月27日 星期六 19时40分53秒
 ************************************************************************/

#include<stdio.h>

void str_cat(char *buffer,char *target)
{
	int i;
	for(i = 0; buffer[i] != '\0';++i)
		;
	for(int j = 0; target[j] != '\0'; ++j)
	{
		buffer[i++] = target[j] ;
	}
	buffer[i] = '\0';
}

int main()
{
	char str1[100];
	char str2[50];
	scanf("%s%s",str1,str2);
	str_cat(str1,str2);
	printf("%s\n",str1);

	return 0;
}

70,038

社区成员

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

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