鱼C论坛

 找回密码
 立即注册
查看: 881|回复: 2

[已解决]c语言strcat函数编写

[复制链接]
发表于 2020-7-17 20:54:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 冷回清风暖 于 2020-7-17 20:59 编辑

在编写代码过程中 发现
  1.         while(*++strDes != '\0');
复制代码
能正常连接字符串。
01.png
  1.         while(*strDes++ != '\0');//优先级 ++ > *
复制代码
把该部分代码替换成这样的,运行代码不能成功连接字符串。
02.png

调试了下也不知道为什么

附上strcat代码
  1. char *strcat1(char *strDes, const char *strSrc)
  2. {
  3.         char *address = strDes;

  4.         if(strDes == NULL || strSrc == NULL)
  5.                 return NULL;

  6.         while(*++strDes != '\0');//优先级 ++ > *  ,*strDes++失败??

  7.         while((*strDes++ = *strSrc++) != '\0');
  8.        
  9.         return address;
  10. }
复制代码


附上完整代码
  1. #include<stdio.h>
  2. #include<Windows.h>
  3. #include<stdlib.h>

  4. char *s_gets(char *st, int n);
  5. char *strcat1(char *strDes, const char *strSrc);

  6. int main(void)
  7. {
  8.         char strdes[100]= {0};
  9.         char strsrc[100] = {0};
  10.         char *result;

  11.         printf("请输入被连接的字符串:");
  12.         if((result = s_gets(strdes,100)) == NULL)
  13.                 exit(EXIT_FAILURE);
  14.         printf("请输入要连接的字符串:");
  15.         if((result = s_gets(strsrc,100)) == NULL)
  16.                 exit(EXIT_FAILURE);

  17.         strcat1(strdes,strsrc);
  18.         printf("连接结果为:%s",strdes);
  19.         system("pause");
  20.         return 0;
  21. }

  22. char *s_gets(char *st, int n)
  23. {
  24.         char *ret_val;
  25.         int i = 0;

  26.         ret_val = fgets(st,n,stdin);
  27.         while(st[i] != '\n' && st[i] != '\0')
  28.                 i++;
  29.         if(st[i] == '\n')
  30.                 st[i] = '\0';
  31.         else while(getchar() != '\0')
  32.                 continue;
  33.         return ret_val;
  34. }

  35. char *strcat1(char *strDes, const char *strSrc)
  36. {
  37.         char *address = strDes;

  38.         if(strDes == NULL || strSrc == NULL)
  39.                 return NULL;

  40.         while(*++strDes != '\0');//优先级 ++ > *  ,*strDes++失败??

  41.         while((*strDes++ = *strSrc++) != '\0');
  42.        
  43.         return address;
  44. }
复制代码


最佳答案
2020-7-17 21:08:01
  1.         while(*++strDes != '\0');
复制代码

是先自加,然后再进行判断,判断的是当前的字符,也就是说当前到了字符串的结尾字符'\0'就跳出循环,拼接的时候,覆盖了原字符串的末尾字符'\0',所以能正确拼接。
  1.         while(*strDes++ != '\0');//优先级 ++ > *
复制代码

这种写法是先判断,然后再进行自加,判断的是自加前的字符,也就是说跳出循环的时候,当前字符不是'\0',而是'\0'的下一个单元,拼接之后,原字符串末尾的'\0'并没有被覆盖掉,所以看上去没有完成拼接。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-17 21:08:01 | 显示全部楼层    本楼为最佳答案   
  1.         while(*++strDes != '\0');
复制代码

是先自加,然后再进行判断,判断的是当前的字符,也就是说当前到了字符串的结尾字符'\0'就跳出循环,拼接的时候,覆盖了原字符串的末尾字符'\0',所以能正确拼接。
  1.         while(*strDes++ != '\0');//优先级 ++ > *
复制代码

这种写法是先判断,然后再进行自加,判断的是自加前的字符,也就是说跳出循环的时候,当前字符不是'\0',而是'\0'的下一个单元,拼接之后,原字符串末尾的'\0'并没有被覆盖掉,所以看上去没有完成拼接。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-17 21:10:58 | 显示全部楼层
&#128077; 谢谢 我调试了好久没看出来,你这么一说我有思路了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-5 18:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表