我正在使用自带函数的probs,它应该根据字符数量将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已停止工作(我的项目名称)。
答案 0 :(得分:3)
应该是
*str1 = '\0';
因为它已经增加了。
简化版
while (c-- > 0) *str1++ = *str2++;
您可以很容易地看到,当c
为1
时,*str1
获取*str2
值,并且会递增,因此str1
指向之后刚刚设置的值。因此,直接使用str1
指针设置最终0
以指示字符串的结尾可写为
while (c-- > 0) *str1++ = *str2++;
*str1 = 0;
(实际上'\0'
表示char值为零,因此直接写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;
}
答案 1 :(得分:0)
您是否提前为str1和str2分配了内存?每个字符串需要c + 1个字节; c + 2用于变异字符串,给出了另一个答案指出的错误; - )
答案 2 :(得分:0)
char *strncpy_my(char *str1, char *str2, size_t size){
char *ret = str1;
while(size>0){
if(*str2=='\0')break;
*str1++ = *str2++;
--size;
}
while(size>0){
*str1++ = '\0';
--size;
}
return ret;
}