gpt4 book ai didi

c - 我想直接使用 strncpy 函数,你能检查一下我的代码吗?存在总线错误

转载 作者:行者123 更新时间:2023-11-30 18:20:57 24 4
gpt4 key购买 nike

我想通过代码创建 strncpy 函数,而不是使用库或 header

但是 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com