鱼C论坛

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

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

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


最佳答案
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 ...
想知道小甲鱼最近在做啥?请访问 -> 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-28 21:12:35 | 显示全部楼层
楼主的define能编译通过吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

楼主可以把a、b、c的大小声明成100试试
int a[100] = .....;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

能通过不过会有警告
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-29 07:32:09 | 显示全部楼层
可恶差一点就刷到最佳答案了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

哈哈哈,一起努力
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-3 19:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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