关于C语言 memcpy的问题

主函数中为啥显示不了数据呢?
#include "stdlib.h"
#include "stdio.h"
#include "string.h"
#include "math.h"

void readfile(int *pa)
{
int a[3] = {1, 2, 3};
pa = (int*)calloc(3, sizeof(int));
memcpy(pa, a, 3*sizeof(int));
}

void main()
{

int *pa = NULL;

readfile(pa);

for(int i=0;i<3;i++)
printf("%d\t", pa[i]);
}

两个问题:
1、readfile参数用整数指针并不能将分配的内存地址带出该函数,应该用指针的指针才能带出;
2、没有地方等程序执行完,否则除非在命令行状态,否则看不到数据。
修改如下:
void readfile(int **pa)
{
int a[3] = {1, 2, 3};
*pa = (int*)calloc(3, sizeof(int));
memcpy(*pa, a, 3*sizeof(int));
}

void main()
{

int *pa = NULL;
readfile(&pa);
for(int i=0;i<3;i++)
printf("%d\t", pa[i]);
system("PAUSE");
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2012-03-31
两种该法。
1.使用指针的指针:
void readfile(int **pa)
{
int a[3] = {1, 2, 3};
*pa = (int*)calloc(3, sizeof(int));
memcpy(*pa, a, 3*sizeof(int));
}
void main()
{
int *pa = NULL;
readfile(&pa);
for(int i=0;i<3;i++)
printf("%d\t", pa[i]);
}
2.在主函数中分配空间(可以理解成使用数组)
void readfile(int *pa)
{
int a[3] = {1, 2, 3};
memcpy(pa, a, 3*sizeof(int));
}

void main()
{
int *pa = NULL;
pa = (int*)calloc(3, sizeof(int));
readfile(pa);
for(int i=0;i<3;i++)
printf("%d\t", pa[i]);
}

关于C语言 memcpy的问题
两个问题:1、readfile参数用整数指针并不能将分配的内存地址带出该函数,应该用指针的指针才能带出;2、没有地方等程序执行完,否则除非在命令行状态,否则看不到数据。修改如下:void readfile(int **pa){ int a[3] = {1, 2, 3};pa = (int*)calloc(3, sizeof(int));memcpy(*pa, a...

C语言memcpy的一些问题
memcpy是直接向内存复制数据 (PLONG)(FunctionAddr + 1)FunctionAddr 为PBYTE类型,比如他的指针是12345,+1后为12346,后面又有个转换*(PLONG)PBYTE为指针类型,指针其实就是地址。。地址+1.再转化为PLONG类型。PLONG也是指针类型嘛。就是地址! 加*号表示取地址上的值!加&号表示取一个变量的...

c语言中有关memcpy函数的问题
字符串*s是以结束符'\\0'为结束的,而strlen为字符串的长度,但是不包括结束符。而printf函数中需要结束符,因此需要用d[strlen(s)]='\\0’。可以在使用memcpy(d,s,strlen(s)+1).

C语言memcpy的一些问题
memcpy是字符串处理函数。所以你这样直接用int的地址是错误的,int和char不是不可以通用。只是一般很容易搞错。一般通用的值恐怕只有0这个值了。因为0这个值,int四个字节,四个字解32位都是0值就是0,而char一个字节8为都是0才会是0,那么char和int的就能行了。但是即使是0很多人都会搞错。x是int...

memcpy函数怎么用
在C和C++编程中,内存拷贝的核心函数是memcpy。它的基本功能是从源内存地址src开始,拷贝n个字节的内容到目标地址dest。在C语言中,通过#include <string.h>来调用这个函数;而在C++中,分别使用#include <cstring>和#include <string.h>也是可行的。memcpy函数的一个关键点在于,它并不检查源和目标...

关于memcpy()函数
关于memcpy函数:答案:memcpy函数是一个标准的C语言库函数,用于将一块内存区域的内容复制到另一块内存区域。它是通过对内存地址进行操作,将指定的字节从源地址复制到目标地址,不涉及数据类型和边界检查。复制的尺寸由函数的第三个参数决定。因此,使用memcpy时要确保目标内存区域足够大,以避免溢出问题。...

求解,C语言中memcpy函数有问。
char *destin="abcdefghijklmn";这样表示的是一个字符串 常量 ,是不允许改变destin中的内容的。destin[] 声明的是一个数组,是可以改变里面内容的。

C语言memcpy的一些问题
虽然你这么存储是确实把内部东西都存储进去了,但是根据计算机的编码显示原因,你直接看编译后产生的那些东西就是乱码的,或者不符合你要求的。你可以对照原始存储进去的二进制码与原来的对比,应该是相同的。而且int x=10;这里的int应该是4个字节,writedata(&x,2);应该是writedata(&x,4);

c语言中memcpy中的第三个参数可以是是负数么?
不可以的,void *memcpy( void *dest, const void *src, size_t count );这是memcpy的原型,第三个参数是size_t型,size_t unsigned integer size_t 就是无符号整形的别名,所以第三个参数是大于等于0的整数。memcpy的第三个参数代表的是复制内存空间的大小,一个空间的大小怎么可能是负数。

C语言 memcpy()函数应用问题(简单小程序)!!!
char *d这个d指向字符串常量是只读呢,不能当做左值。所以可以改成char d[] = "This is a test for memcpy function"而如果要用memcpy实现strcpy可以 memcpy(dest, src, strlen(src)+1)

相似回答