鱼C论坛

 找回密码
 立即注册
查看: 2342|回复: 6

[已解决]对数字数组实现一个等同于字符串strcat()函数的arrcat(函数)

[复制链接]
发表于 2019-5-28 20:18:20 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 bin554385863 于 2019-5-28 20:38 编辑
  1. /*数组长度函数*/
  2. #include <stdio.h>
  3. #define e "'E'"        //用'E'表示一个数字数组的结束.
  4. size_t arrlen(size_t arr[])
  5. {
  6.     size_t i = 1;
  7.     while (*(arr + i) != e)
  8.     {
  9.         i++;
  10.     }
  11.     return i;
  12. }
复制代码
  1. #include <stdio.h>
  2. #include "E:\Administrator\Documents\My C\My C Function\Function.c"
  3. void arrcat(size_t arr1[], size_t arr2[])
  4. {
  5.     size_t temp[arrlen(arr1) + arrlen(arr2)];
  6.     size_t i, j, k;
  7.     for (i = 0; i < arrlen(arr1); i++)
  8.     {
  9.         temp[i] = arr1[i];
  10.     }
  11.     for (j = 0; j < arrlen(arr2); j++)
  12.     {
  13.         temp[i + j] = arr2[j];
  14.     }
  15.     for (k = 0; k < i + j; k++)
  16.     {
  17.         arr1[k] = temp[k];
  18.         arr1[k + 1] = e;
  19.         printf("%d", arr1[k]);//怎么实现用改变后的数组arr1[]覆盖原数组arr1[]?,这里会出现堆栈错误
  20.     }
  21. }
  22. void main()
  23. {
  24.     int a[] = {1, 2, 3, e};
  25.     int b[] = {4, 5, 6, e};
  26.     int c[] = {7, 8, 9, e};
  27.     arrcat(a, b);
  28.     printf("\n");
  29.     arrcat(a, c); //这里出现奇怪的异常
  30. }
复制代码

   


最佳答案
2019-5-28 20:18:21
本帖最后由 人造人 于 2019-5-28 22:08 编辑

你的arrcat函数实现方法就不对,你应该仿照strcat函数
你先应该实现一个strcat

C函数
原型
extern char *strcat(char *dest, const char *src);

头文件
在C中,函数原型存在 <string.h>头文件中。

在C++中,则存在于<cstring>头文件中。

功能
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。

说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。


返回指向dest的指针。

https://baike.so.com/doc/5441961-5680308.html

最佳答案

查看完整内容

你的arrcat函数实现方法就不对,你应该仿照strcat函数 你先应该实现一个strcat C函数 原型 extern char *strcat(char *dest, const char *src); 头文件 在C中,函数原型存在 头文件中。 在C++中,则存在于头文件中。 功能 把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。 说明 src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。 返回指向dest的指针。 https://baik ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-28 20:18:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2019-5-28 22:08 编辑

你的arrcat函数实现方法就不对,你应该仿照strcat函数
你先应该实现一个strcat

C函数
原型
extern char *strcat(char *dest, const char *src);

头文件
在C中,函数原型存在 <string.h>头文件中。

在C++中,则存在于<cstring>头文件中。

功能
把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')。

说明
src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。


返回指向dest的指针。

https://baike.so.com/doc/5441961-5680308.html
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-28 21:12:35 | 显示全部楼层
楼主的define能编译通过吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-28 21:52:56 | 显示全部楼层
第二段代码的24、25、26三行明确声明定义的数组的内容以及数组的大小(先忽略可能出现的编译error)。
第17、和第18行代码是非常危险的操作,这样做可能(肯定)会破坏内存其他地方的数据。

楼主可以把a、b、c的大小声明成100试试
int a[100] = .....;
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-29 00:12:39 | 显示全部楼层
我就是个弟弟 发表于 2019-5-28 21:12
楼主的define能编译通过吗?

能通过不过会有警告
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-5-29 07:32:09 | 显示全部楼层
可恶差一点就刷到最佳答案了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-5-29 08:03:59 From FishC Mobile | 显示全部楼层
我就是个弟弟 发表于 2019-5-29 07:32
可恶差一点就刷到最佳答案了

哈哈哈,一起努力
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-4 15:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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