分段故障(核心已转储)-strlcpy函数C

伊克·特耶罗(Iker Tejero)

我一直在构建一些基本的C函数,但是Im还是不太有经验。

在对strlcpy函数进行编码时,我不断收到分段错误(核心转储)错误。以为它可能与NUL终止的字符串有关,但是我在运行时不断收到错误消息。

任何帮助将不胜感激,在此先感谢。

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

unsigned int    ft_strlcpy(char *dst, char *src, unsigned int size)
{
    unsigned int i;
    unsigned int j;

    j = 0;
    while (src[j] != '\0')
        j++;
    
    if (size == 0)
        return (j);

    i = 0;
    while (i < (size - 1) && src[i] != '\0')
    {
        dst[i] = src[i];
        i++;
    }
    dst[i] = '\0';
    return (j);
}

int main()
{
    char *str;

    str = "byes";
    str[3] = '\0';
    printf("%s", str);
    printf("%u", ft_strlcpy("hello", str, 5));
    return (0);
}

更正功能,以防有人需要

unsigned int    ft_strlcpy(char *dst, char *src, unsigned int size)
{
    unsigned int i;
    unsigned int j;

    j = 0;
    while (src[j] != '\0')
        j++;
    
    if (size == 0)
        return (j);

    i = 0;
    while (i < (size - 1) && src[i] != '\0')
    {
        dst[i] = src[i];
        i++;
    }
    dst[i] = '\0';
    return (j);
}

int main()
{
    char str[] = "byes";
    char dest[] = "hello";

    printf("%s\n", str);
    printf("%u\n", ft_strlcpy(dest, str, 5));
    printf("%s\n", dest);

    return (0);
}

那应该返回:

byes
4
byes
来自莫斯科的弗拉德

您声明了一个指向字符串文字的指针

char *str;

str = "byes";

字符串文字不能更改。但是您正在尝试更改指向的字符串文字

str[3] = '\0';

导致未定义的行为。

删除此语句。字符串文字已经包含索引为4的终止零。

也在这次通话中

printf("%u", ft_strlcpy("hello", str, 5));

您再次尝试使用函数更改字符串文字ft_strlcpy在这种情况下,它是字符串文字"hello"

声明一个字符数组,例如

char dsn[] = "hello";

并将其作为参数传递给函数

printf("%u", ft_strlcpy( dsn, str, sizeof( dsn )));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

分段故障(核心已转储)c

来自分类Dev

C-分段故障(核心已转储)

来自分类Dev

分段故障核心已转储:返回下一个质数的函数

来自分类Dev

分段故障(核心已转储)。在哈希表中使用单独的链接。(C ++)

来自分类Dev

C-指向结构“分段故障(核心已转储)”中动态数组的指针

来自分类Dev

C ++:分段错误(核心已转储)

来自分类Dev

C程序分段默认(核心已转储)

来自分类Dev

c中的分段错误(核心已转储)

来自分类Dev

分段错误(核心已转储)Yacc / C

来自分类Dev

分段错误(核心已转储)C lang

来自分类Dev

C-分段错误(核心已转储)

来自分类Dev

分段故障核心转储问题与C

来自分类Dev

分段故障(核心已转储)

来自分类Dev

分段故障(核心已转储)

来自分类Dev

简单(但很长)bash函数中的分段错误(核心已转储)

来自分类Dev

调用vfprintf函数后出现分段错误(核心已转储)

来自分类Dev

简单C代码中的分段错误(核心已转储)

来自分类Dev

C ++:分段错误(核心已转储)在Linux OS上

来自分类Dev

具有模数的c ++分段错误(核心已转储)

来自分类Dev

C中的链接列表操作(分段错误核心已转储!)

来自分类Dev

C ++对象分段错误(核心已转储)错误

来自分类Dev

分段错误(核心已转储)-argv-c

来自分类Dev

fscanf-C中的分段错误(核心已转储)

来自分类Dev

C程序中的分段错误(核心已转储)

来自分类Dev

在fork()上的C分段错误(核心已转储)

来自分类Dev

无法解决c中的分段错误(核心已转储)

来自分类Dev

C聊天程序获取错误分段错误(核心已转储)

来自分类Dev

C-分段错误(核心已转储)错误

来自分类Dev

在C中出现错误“分段错误(核心已转储)”

Related 相关文章

  1. 1

    分段故障(核心已转储)c

  2. 2

    C-分段故障(核心已转储)

  3. 3

    分段故障核心已转储:返回下一个质数的函数

  4. 4

    分段故障(核心已转储)。在哈希表中使用单独的链接。(C ++)

  5. 5

    C-指向结构“分段故障(核心已转储)”中动态数组的指针

  6. 6

    C ++:分段错误(核心已转储)

  7. 7

    C程序分段默认(核心已转储)

  8. 8

    c中的分段错误(核心已转储)

  9. 9

    分段错误(核心已转储)Yacc / C

  10. 10

    分段错误(核心已转储)C lang

  11. 11

    C-分段错误(核心已转储)

  12. 12

    分段故障核心转储问题与C

  13. 13

    分段故障(核心已转储)

  14. 14

    分段故障(核心已转储)

  15. 15

    简单(但很长)bash函数中的分段错误(核心已转储)

  16. 16

    调用vfprintf函数后出现分段错误(核心已转储)

  17. 17

    简单C代码中的分段错误(核心已转储)

  18. 18

    C ++:分段错误(核心已转储)在Linux OS上

  19. 19

    具有模数的c ++分段错误(核心已转储)

  20. 20

    C中的链接列表操作(分段错误核心已转储!)

  21. 21

    C ++对象分段错误(核心已转储)错误

  22. 22

    分段错误(核心已转储)-argv-c

  23. 23

    fscanf-C中的分段错误(核心已转储)

  24. 24

    C程序中的分段错误(核心已转储)

  25. 25

    在fork()上的C分段错误(核心已转储)

  26. 26

    无法解决c中的分段错误(核心已转储)

  27. 27

    C聊天程序获取错误分段错误(核心已转储)

  28. 28

    C-分段错误(核心已转储)错误

  29. 29

    在C中出现错误“分段错误(核心已转储)”

热门标签

归档