看了练习的题目,要求实现strccpy库函数,这样实现了一下:
[root@bjxdurs235 c-study]# vi copy_n_str.c
#include
void copy_n( char dst[], char src[], int n){
int i,dst_len,src_len;
dst_len = strlen(dst);
src_len = strlen(src);
if (n > dst_len || n < 0){
printf("input error ! \n dst[] can not store %d chars\n",n);
return ;
}
if( n > src_len)
n = src_len;
for (i=0; i dst[i] = src[i];
}
if (i < dst_len)
dst[i] = '\0';
}
int main(void)
{
int i;
char srouce[] = "hello every one , good evening!";
char destination[20]="1234567891234567891";
copy_n(destination,srouce,10);
printf("%s\n",destination);
}
~
~
~
~
~
~
"copy_n_str.c" 33L, 547C written
[root@bjxdurs235 c-study]# gcc copy_n_str.c
[root@bjxdurs235 c-study]# ./a.out
hello ever
过程中遇到的问题有:
1、刚开始没有给destination[20]初始化,结果用gdb调试的时候,传给函数的时候,他内容是:
(gdb) i locals
i = 8286196
srouce = "hello every one , good evening!"
destination = "\000\000\000\000\000\000\000\000\2160"
所以strlen求他的长度,肯定是0了
2、给dst的最后一个元素赋值:'\0',那个i已经指向最后一个数组元素了,不需要再加1了
好了,自己实现了以后,看看课后的答案吧,答案里没有用strlen判断,而是直接把src的为0的条件拿来判断了,这样不太好,对目的数组的长度肯定是要判断的啊。
阅读(454) | 评论(0) | 转发(0) |