C++关于函数 交换值

猿说编程 2014-12-24 06:18:49
void fun(unsigned char** dst_buf,unsigned char* src_buf)
{
for (int i = 0;i<10;i++)
{
*dst_buf[i] = src_buf[i];
}

}

int _tmain(int argc, _TCHAR* argv[])
{
unsigned char *buf = (unsigned char *)malloc(20);
unsigned char *buf1 = (unsigned char *)malloc(20);
memcpy(buf1,"123456789",10);

fun(&buf,buf1);
}


*dst_buf[i] = src_buf[i];在 i=2的时候会蹦,求解。。。本意是想将src_buf的数据拷贝到buf中,通过址传递的方式。。。新手。。大神勿喷。。
...全文
237 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
动力风暴 2014-12-25
  • 打赏
  • 举报
回复
如1楼所说直接传递指针就可以了,我在vs2010上试了一下:

#include <iostream>
using namespace std;
void fun(unsigned char* dst_buf,unsigned char* src_buf)
{
	for (int i = 0;i<10;i++)
	{
		dst_buf[i] = src_buf[i];
	}
}

int main()
{
	unsigned char *buf = (unsigned char *)malloc(20);
	unsigned char *buf1 = (unsigned char *)malloc(20);
	memcpy(buf1,"123456789",15);
	fun(buf,buf1);
	cout<<buf<<endl;
}
问楼主一个问题:为什么要把主函数头写成这样

int _tmain(int argc, _TCHAR* argv[])
michael2988 2014-12-25
  • 打赏
  • 举报
回复
还有一个你在主函数里面分配的空间没有释放掉!
michael2988 2014-12-25
  • 打赏
  • 举报
回复

void fun(unsigned char* dst_buf,unsigned char* src_buf)
{
    for (int i = 0;i<10;i++)
    {
        dst_buf[i] = src_buf[i];
    }
}
int main()
{
    unsigned char *buf = (unsigned char *)malloc(20);
    unsigned char *buf1 = (unsigned char *)malloc(20);
    memcpy(buf1,"123456789",10);

    fun(buf,buf1);

    std::cout << buf << std::endl;
    return 0;
}
这样子不行吗?
mymtom 2014-12-25
  • 打赏
  • 举报
回复
1. *dst_buf[i] 等价于 *(dst_buf[i]) 楼主需要的是 (*dst_buf)[i] 2. 正如2楼所说,一级指针就可以了,不需要用二级指针

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void fun(unsigned char **dst_buf, unsigned char *src_buf)
{
    int i;

    for (i = 0; i < 10; i++) {
        (*dst_buf)[i] = src_buf[i];
    }

}

int main(int argc, char *argv[])
{
    unsigned char *buf = (unsigned char *)malloc(20);
    unsigned char *buf1 = (unsigned char *)malloc(20);

    memcpy(buf1, "123456789", 10);

    fun(&buf, buf1);

    printf("%s\n", buf);

    return 0;
}
猿说编程 2014-12-25
  • 打赏
  • 举报
回复
引用 2 楼 michael2988 的回复:
*dst_buf[i] 为 *(*(dst_buf + i)) 当i>0时,dst_buf为数组名的地址,dst_buf + i 应该是不确定的
还是有这个问题,没有得到解决!
赵4老师 2014-12-25
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
michael2988 2014-12-25
  • 打赏
  • 举报
回复
*dst_buf[i] 为 *(*(dst_buf + i)) 当i>0时,dst_buf为数组名的地址,dst_buf + i 应该是不确定的
JiangWenjie2014 2014-12-24
  • 打赏
  • 举报
回复
别用二级指针,直接传指针进去就可以了

64,281

社区成员

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

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