gpt4 book ai didi

c++ - 处理数组

转载 作者:行者123 更新时间:2023-11-28 07:20:18 25 4
gpt4 key购买 nike

演示将数组作为参数传递的示例

#include <iostream>
#include <malloc.h>
using namespace std;

typedef unsigned char U8;

#define MAX_LEN 20

void func1(U8* arr)
{
printf(" Passing Base address Element1 = %s\n",arr);
}

void func2(U8* arr)
{
printf(" Passing Pointer address Element1 = %s \n",arr);
}

int main()
{

U8 arr[MAX_LEN] = "Stack Overflow\n";
U8* arr1 = (U8*)malloc(sizeof(MAX_LEN));
func1(arr); /* Passing Base address */
memcpy(arr1,arr,sizeof(arr));
/*
memcpy(arr1,arr,sizeof(MAX_LEN)); Leads to Heap Corruption why ?
*/
func2(arr1);/* Passing pointer */
free(arr1);
cout << "Array Freed" << endl;
cin.get();
return 0;
}

查询:1.考虑到数据处理,这是最佳实践。[堆栈或堆上的数据]2. 请建议用于此类情况的可靠方法

最佳答案

memcpy(arr1,arr,sizeof(MAX_LEN)); // Leads to Heap Corruption why ?

因为 sizeof(MAX_LEN) 等价于 sizeof(20) 等价于 sizeof(int)。这意味着您将复制 4 或 8 个字节(取决于您的平台)。然后在 fun1 中打印数组,就好像它是一个空终止字符串一样。但是没有空终止符,因为您没有复制它并且 printf 很高兴地超出了界限。

sizeof(arr),另一方面,给你正确的大小 20。

sizeof 运算符查询您给它作为操作数的表达式类型 的大小,而不是值。它纯粹是编译时运算符。整型文字 20 的类型是 int,它将返回该类型的大小。

关于c++ - 处理数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19588334/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com