VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 247|回复: 5

[求助] 自己练习写了一个字符串连接的小函数,不是到问题出在哪里?一直得不到正确输出。

[复制链接]
18_avatar_middle
在线会员 发表于 2019-7-6 19:51:12 | 显示全部楼层 |阅读模式
自己联系写了一个字符串连接的小函数,不是到问题出在哪里?一直得不到正确输出。
源码附上:
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;

  4. char* stringcat(char a[], const char b[])
  5. {
  6.         int i=0;
  7.         if (sizeof(a) < (strlen (a) + strlen(b)))
  8.         {
  9.                 cout<<"string size not match."<<endl;       
  10.                 return 0;       
  11.         }
  12.         else
  13.         {
  14.                 while (b[i] != '\0')
  15.                 {
  16.                         a[strlen(a)+i] = b[i];
  17.                         i++;
  18.                 }
  19.                 return a;
  20.         }
  21. }

  22. int main(int argc, char * argv[])
  23. {
  24.         char des[20] = "Hello";
  25.         const char* src  = " world";
  26.         cout<<"Size of des is : "<<sizeof(des)<<endl;
  27.         cout<<"Length of des is : "<<strlen(des)<<endl;
  28.         cout<<"Length of src is : "<<strlen(src)<<endl;
  29.         cout<<stringcat(des, src)<<endl;
  30. }
复制代码


Capture.JPG




上一篇:指针问题
下一篇:关于MFCCDialog类调用create的问题
82_avatar_middle
在线会员 发表于 2019-7-6 23:07:35 | 显示全部楼层
这个我会,哈哈
  1. char* stringcat(char a[], const char b[])
  2. {
  3.         int i = 0;
  4.         //if (sizeof(a) < (strlen(a) + strlen(b)))
  5.         //{
  6.         //        cout << "string size not match." << endl;
  7.         //        return 0;
  8.         //}
  9.         //else
  10.         //{
  11.                 int a_len = strlen(a);
  12.                 while (b[i] != '\0')
  13.                 {
  14.                         a[a_len + i] = b[i];
  15.                         i++;
  16.                 }
  17.                 return a;
  18.         //}
  19. }
复制代码


a 就是这个指针,所以在 32 位的程序中,sizeof(a) 就是4个字节,这里别当数组首地址来看,所以不能用 sizeof(a) 来求数组 a 所占用的字节数。
18_avatar_middle
ico_lz  楼主| 发表于 2019-7-6 23:22:32 | 显示全部楼层
本帖最后由 harc 于 2019-7-6 23:24 编辑


  cout<<"Size of des is : "<<sizeof(des)<<endl;

也考虑到了你说的这个问题,所以特意加了一个测试代码,这一行的输出是正常的
18_avatar_middle
ico_lz  楼主| 发表于 2019-7-6 23:42:24 | 显示全部楼层
斑竹在吗? 求帮忙解答自己练习写了一个字符串连接的小函数,不是到问题出在哪里?一直得不到正确输出。
51_avatar_middle
online_admins 发表于 2019-7-7 22:42:58 | 显示全部楼层

在 main 中对 sizeof(des) 求得的结果和在 stringcat 函数中求得的是不一样的!楼主可以试试,同意 @love_cctry 的说法
18_avatar_middle
ico_lz  楼主| 发表于 2019-7-8 23:37:42 | 显示全部楼层
Syc 发表于 2019-7-7 22:42
在 main 中对 sizeof(des) 求得的结果和在 stringcat 函数中求得的是不一样的!楼主可以试试,同意 @love ...

调试了一下,果然是这样的,谢谢各位提醒。自己练习写了一个字符串连接的小函数,不是到问题出在哪里?一直得不到正确输出。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-7-22 22:54

Powered by Discuz! X3.4

© 2009-2019 cctry.com

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