我想通过代码而不是通过使用库或标题来使strncpy函数

但是有zsh总线错误...我的代码怎么了?什么是zsh总线错误?

#include <stdio.h>
#include <string.h>

char    *ft_strncpy(char *dest, char *src, unsigned int n)
{
    unsigned int    i;

    i = 0;
    while (i < n && src[i])
    {
        dest[i] = src[i];
        i++;
    }
    while (i < n)
    {
        dest[i] = '\0';
        i++;
    }
    return (dest);
}

int main()
{
    char         *A = "This is a destination sentence";
    char         *B = "abcd";
    unsigned int  n = 3;

    printf("%s", ft_strncpy(A, B, n));
}

最佳答案

您实现的strncpy很好,可以正确实现容易出错的功能的异常语义(n的类型除外,该类型应为size_t)。

您的测试函数不正确:您将字符串常量的地址作为目标数组传递,从而在ft_strncpy()尝试对其进行写入时导致未定义的行为。字符串常量不得写入。如果可用,编译器可能会将它们放置在只读存储器中。在您的系统上,写入只读内存会导致总线错误,如Shell所报告的那样。

这是一个以本地数组为目标的修改后的版本:

int main()
{
    char          A[] = "This is a destination sentence";
    const char   *B = "abcd";
    unsigned int  n = 3;

    printf("%s\n", ft_strncpy(A, B, n));
    return 0;
}

关于c - 我想直接使strncpy函数,你可以查看我的代码吗?有总线错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60026726/

10-10 01:07