哪个能说明这段代码怎么没有把连个字符串全连接了

xuguiyi100 2009-10-12 10:55:41
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#include<string.h>
void Mystrcat(char *str1, char *str2)
{
unsigned int i=1,j=1;
i=strlen(str1);
str1=str1+i;
for(j=1;j<=strlen(str2);j++)
{
*str1=*str2;
str1++;

str2++;


}
*(str1++)='\0';
}
void main()
{
char a[80],b[80];
printf("请输入字符串:");
gets(a);
printf("请输入字符串:");
gets(b);
Mystrcat(a,b);
printf("连接后为:");
puts(a);
puts(b);

}
...全文
90 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
御用程序员 2009-10-13
  • 打赏
  • 举报
回复

for(j=1;j <=strlen(str2);j++)
{
*str1=*str2;
str1++;
str2++;
}


这一段中的strlen(str2)的问题,你假定从str1的尾部开始连续赋值,次数是str2的长度。但是实际上这个for循环运行的次数要少于你的预期,因为strlen(str2)的值在循环后str2++后就会减小1。所以第二个字符串还没有完全赋值完循环就结束了。
xuguiyi100 2009-10-12
  • 打赏
  • 举报
回复
谢了,好像有点懂了
mstlq 2009-10-12
  • 打赏
  • 举报
回复
看1楼……
str2++;//这句话会影响strlen(str2)的结果
xuguiyi100 2009-10-12
  • 打赏
  • 举报
回复
但是那一段有什么问题呢,有没人给我解决下?
xuguiyi100 2009-10-12
  • 打赏
  • 举报
回复
结果还是一样的,不能全部输出,对str2只能输出一段的
mstlq 2009-10-12
  • 打赏
  • 举报
回复
建议楼主写
void Mystrcat(char *str1, char *str2)
{
while(*str1++);
str1--;
while(*str1++=*str2++);
}
liao05050075 2009-10-12
  • 打赏
  • 举报
回复
for(j=1;j <=strlen(str2);j++)
{
*str1=*str2;
str1++;
str2++;
}
字符串数组下标是从0开始的
这里要改成
for(j=0;j<strlen(str2);j++)
mstlq 2009-10-12
  • 打赏
  • 举报
回复

#include <iostream>
#include <stdio.h>
#include <string.h>
void Mystrcat(char *str1, char *str2)
{
unsigned int i=1,j=1;
i=strlen(str1);
str1=str1+i;
i=strlen(str2);
for (j=1;j <=i;j++)
{
*str1=*str2;
str1++;
str2++;//这句话会影响strlen(str2)的结果
}
*(str1++)='\0';
}
int main()
{
char a[80],b[80];
printf("请输入字符串:");
gets(a);
printf("请输入字符串:");
gets(b);
Mystrcat(a,b);
printf("连接后为:");
puts(a);
puts(b);

}

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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