c - 不工作/使用自己的 Strncpy 函数

标签 c string pointers strncpy

我有一个自己的函数,应该根据字符的数量将 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++;

很容易看出,当c1时,*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/

相关文章:

fscanf() 可以读取空格吗?

java - 如何从网页中获取特定文本

c - 在分隔符处分割一行文本后打印

计算 fork() 代码中的进程总数

c - 哪个更适合windows? pthreads 还是 CreateMutex?

c - 在 C 中将一个结构分配给另一个结构

java - 如何对对象数组进行排序 key 使用Java?

string - 如何转换Primitive.M映射到[string] string然后映射到string?

c - C 中的二维数组和指针 - 如何访问元素?

c - c中的数组名到底是什么?