/*
**函数功能是从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];
}
}
15 个解决方案
#1
不知道你什么意思,你的参数的内存大小不是已经在实现中求出来了。
#2
没太看懂
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
#3
1 sizeof理解有误
2 不能
2 不能
#4
1.无法实现你想要的功能
2.
这段是错的。两个长度结果都为4,sizeof(dst)计算的是,dst变量所占的空间,指针类型都为4。
如果你定义了一个变量,char dat[100];那么sizeof(dat)的结果就为100;
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;
#5
不是的,在函数中不一样的。你可以去试下
#6
也就是说只能通过显示传递数组大小参数了?
#7
就是要求函数调用时 比如前面char Merroy[20]; 调用时是copy_n(Merroy,...)这样,然后在函数里面求Merroy数组的大小
#8
首先数组名作为参数处理的时候表示指针 sizeof其大小4..
你可以通过循环判断'\0',来确定数组长度。
你可以通过循环判断'\0',来确定数组长度。
#9
sizeof是编译的时候计算好了, 所以没办法知道你程序运行到这里会有多大空间.
老老实实传一个长度进去吧, 最正规的做法了.
老老实实传一个长度进去吧, 最正规的做法了.
#10
sizeof是编译时就已经计算完成了,不是运行时才计算的!
#11
sizeof无能为力。
调用函数时,传入的是一个指针,任何类型(int/char....struct)的指针大小都是一样的(32位系统4字节),sizeof值一样。
解决办法:
1.商定所有char *字符串都是以 '\0'结尾,用strlen求长度
2.传入长度
调用函数时,传入的是一个指针,任何类型(int/char....struct)的指针大小都是一样的(32位系统4字节),sizeof值一样。
解决办法:
1.商定所有char *字符串都是以 '\0'结尾,用strlen求长度
2.传入长度
#12
不能的,指针只是一个地址,它只包含“从哪里开始”的信息,不包含“有多大”的信息
#13
没太看懂
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
就是要求函数调用时 比如前面char Merroy[20]; 调用时是copy_n(Merroy,...)这样,然后在函数里面求Merroy数组的大小
不能的,指针只是一个地址,它只包含“从哪里开始”的信息,不包含“有多大”的信息
指针包含了多大,但是没包含这个之后还有多少个~~
#14
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,定义成了指针。
编译器在编译一个函数的时候,是只考虑函数本身的,函数是独立的。
#15
先说明一下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。
所以你这个绝对的不能进行字符串的复制。
往我的邮箱里发一个邮件我把答案和详细的解释给你发过去
很简单的。
//下面这两句话你没有查仔细,你这么写是不对的
const int lenDst = sizeof(dst)/sizeof(dst[0]);//计算dst数组长度
const int lenSrc = sizeof(src)/sizeof(src[0]);//计算src数组长度
你这里sizeof(dst)中的dst仅仅是一个形参,它的类型是指针,所以这个就是计算一下指针的大小,等于4。
所以你这个绝对的不能进行字符串的复制。
往我的邮箱里发一个邮件我把答案和详细的解释给你发过去
很简单的。
#1
不知道你什么意思,你的参数的内存大小不是已经在实现中求出来了。
#2
没太看懂
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
#3
1 sizeof理解有误
2 不能
2 不能
#4
1.无法实现你想要的功能
2.
这段是错的。两个长度结果都为4,sizeof(dst)计算的是,dst变量所占的空间,指针类型都为4。
如果你定义了一个变量,char dat[100];那么sizeof(dat)的结果就为100;
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;
#5
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;
不是的,在函数中不一样的。你可以去试下
#6
1 sizeof理解有误
2 不能
也就是说只能通过显示传递数组大小参数了?
#7
没太看懂
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
就是要求函数调用时 比如前面char Merroy[20]; 调用时是copy_n(Merroy,...)这样,然后在函数里面求Merroy数组的大小
#8
首先数组名作为参数处理的时候表示指针 sizeof其大小4..
你可以通过循环判断'\0',来确定数组长度。
你可以通过循环判断'\0',来确定数组长度。
#9
sizeof是编译的时候计算好了, 所以没办法知道你程序运行到这里会有多大空间.
老老实实传一个长度进去吧, 最正规的做法了.
老老实实传一个长度进去吧, 最正规的做法了.
#10
sizeof是编译时就已经计算完成了,不是运行时才计算的!
#11
sizeof无能为力。
调用函数时,传入的是一个指针,任何类型(int/char....struct)的指针大小都是一样的(32位系统4字节),sizeof值一样。
解决办法:
1.商定所有char *字符串都是以 '\0'结尾,用strlen求长度
2.传入长度
调用函数时,传入的是一个指针,任何类型(int/char....struct)的指针大小都是一样的(32位系统4字节),sizeof值一样。
解决办法:
1.商定所有char *字符串都是以 '\0'结尾,用strlen求长度
2.传入长度
#12
没太看懂
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
就是要求函数调用时 比如前面char Merroy[20]; 调用时是copy_n(Merroy,...)这样,然后在函数里面求Merroy数组的大小
不能的,指针只是一个地址,它只包含“从哪里开始”的信息,不包含“有多大”的信息
#13
没太看懂
首先sizeof不是函数,其次你说的"指针指向的内存大小"是什么概念??
就是要求函数调用时 比如前面char Merroy[20]; 调用时是copy_n(Merroy,...)这样,然后在函数里面求Merroy数组的大小
不能的,指针只是一个地址,它只包含“从哪里开始”的信息,不包含“有多大”的信息
指针包含了多大,但是没包含这个之后还有多少个~~
#14
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,定义成了指针。
编译器在编译一个函数的时候,是只考虑函数本身的,函数是独立的。
#15
先说明一下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。
所以你这个绝对的不能进行字符串的复制。
往我的邮箱里发一个邮件我把答案和详细的解释给你发过去
很简单的。
//下面这两句话你没有查仔细,你这么写是不对的
const int lenDst = sizeof(dst)/sizeof(dst[0]);//计算dst数组长度
const int lenSrc = sizeof(src)/sizeof(src[0]);//计算src数组长度
你这里sizeof(dst)中的dst仅仅是一个形参,它的类型是指针,所以这个就是计算一下指针的大小,等于4。
所以你这个绝对的不能进行字符串的复制。
往我的邮箱里发一个邮件我把答案和详细的解释给你发过去
很简单的。