关于sizeof函数有关问题

关于sizeof函数问题
我的问题是如果定义如下的函数,函数接口部分不能改,而我所想实现的是如何(或者能否)知道传递过去的指针所指向的内存大小?
/*
**函数功能是从src中复制n个字符到dst中
**输入参数dst和src不能是NULL
*/
void copy_n(char* const dst, char* const src,const int n)
{
/*检测参数是否为空指针*/
assert(dst!=NULL && src != NULL);

int i=0;

/*经过查资料,以下两行是直接计算dst的内存字节大小而不是计算数组长度*/
const int lenDst = sizeof(dst)/sizeof(dst[0]);//计算dst数组长度
const int lenSrc = sizeof(src)/sizeof(src[0]);//计算src数组长度

printf("%d %d\n",lenDst,lenSrc);

while( i<n && i<lenDst && i<lenSrc )
{
dst[i] = src[i];
i++;
}
printf("%s\n",dst);
if (i==n && i<lenDst)
{
dst[i] = '\0';
return;
}
/*src数组不足,以NUL填充dst*/
while(i<n && i<lenDst )
{
dst[i] = '\0';
i++;
}
/*dst数组不足,以src数组元素填充最后一个字符*/
if (i<n && i<lenSrc)
{
dst[i] = src[i];
}
}

------解决方案--------------------
1 sizeof理解有误
2 不能
------解决方案--------------------
sizeof是编译的时候计算好了, 所以没办法知道你程序运行到这里会有多大空间.

老老实实传一个长度进去吧, 最正规的做法了.
------解决方案--------------------
sizeof是编译时就已经计算完成了,不是运行时才计算的!
------解决方案--------------------
sizeof无能为力。
调用函数时,传入的是一个指针,任何类型(int/char....struct)的指针大小都是一样的(32位系统4字节),sizeof值一样。
解决办法:
1.商定所有char *字符串都是以 '\0'结尾,用strlen求长度
2.传入长度
------解决方案--------------------
引用:
Quote: 引用:

1.无法实现你想要的功能
2.
    /*经过查资料,以下两行是直接计算dst的内存字节大小而不是计算数组长度*/    const int lenDst = sizeof(dst)/sizeof(dst[0]);//计算dst数组长度    const int lenSrc = sizeof(src)/sizeof(src[0]);//计算src数组长度

这段是错的。两个长度结果都为4,sizeof(dst)计算的是,dst变量所占的空间,指针类型都为4。

如果你定义了一个变量,char dat[100];那么sizeof(dat)的结果就为100;


不是的,在函数中不一样的。你可以去试下


我看到你说你查了资料之后再去验证一下,才回复的,要不我就是一楼 了。

sizeof(dst),在定义dst的时候,定义成了指针,那么结果就是4,如果定义成了数组,那么结果就是数组元素大小乘以数组元素个数。而在函数void copy_n(char* const dst, char* const src,const int n)中,括号里面的“char* const dst”实际上是定义了dst,定义成了指针。

编译器在编译一个函数的时候,是只考虑函数本身的,函数是独立的。
------解决方案--------------------
先说明一下sizeof不是函数 是关键字。和int,for, while等等是一类东西。
//下面这两句话你没有查仔细,你这么写是不对的
const int lenDst = sizeof(dst)/sizeof(dst[0]);//计算dst数组长度
const int lenSrc = sizeof(src)/sizeof(src[0]);//计算src数组长度
你这里sizeof(dst)中的dst仅仅是一个形参,它的类型是指针,所以这个就是计算一下指针的大小,等于4。
所以你这个绝对的不能进行字符串的复制。
往我的邮箱里发一个邮件我把答案和详细的解释给你发过去 
很简单的。