我有一个自己的函数,应该根据字符的数量将 str2 复制到 str1。
char * strncpy_own(char * str1, char * str2, int c)
{
int i;
for( i = 0; i < c; i++, str1++, str2++ )
{
*str1 = *str2;
}
*(str1 + 1) = '\0';
return str1;
}
请帮忙,当它启动时它立即终止并说:CLearningsss 已停止工作(我的项目名称)。
最佳答案
应该是
*str1 = '\0';
因为它已经递增了。
简化版
while (c-- > 0) *str1++ = *str2++;
很容易看出,当c
为1
时,*str1
得到*str2
的值,并且是递增,因此 str1
指向刚刚设置的值之后。这样直接使用str1
指针设置最后的0
来表示字符串结束可以写成
while (c-- > 0) *str1++ = *str2++;
*str1 = 0;
(实际上'\0'
代表一个char值为0,所以直接写0
也可以)
此外,(感谢@Guillaume_Morin 提到了这一点)该函数最好返回一个指向结果字符串 (str1) 开头的指针,并且您需要保留初始 str1 的副本为此,因为它稍后会增加:
char * strncpy_own(char * str1, char * str2, int c) {
char *str1copy = str1;
while (c-- > 0) *str1++ = *str2++;
*str1 = 0;
return str1copy;
}
关于c - 不工作/使用自己的 Strncpy 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16613728/