C语言 分段错误(内核转储)指针、字符串和数组

1u4esq0p  于 2023-03-01  发布在  其他
关注(0)|答案(1)|浏览(139)

我有这三个文件main. h,4-main. c和4-print_rev.c,所有这三个文件都需要反向打印一个字符串。我不允许使用标准库,因此我没有使用strlen()或printf(),我必须使用_putchar(),它执行与putchar()相同的操作。
然而,当我在Linux沙箱上编译和运行时,我得到了分段错误(核心转储)错误。我使用了在线编译器,它工作正常。请帮助。x1c 0d1x
main.h

#define MAIN_H

#include <stdio.h>
#include <stdlib.h>

int _putchar(char c);
void reset_to_98(int *n);
void swap_int( int *a, int *b);
int _strlen(char *s);
void _puts(char *s);
void print_rev(char *s);

#endif

4-main.c

#include "main.h"

/**
 * main - check the code
 *
 * Return: Always 0.
 */
int main(void)
{
    char *str;

    str = "I do not fear computers. I fear the lack of them - Isaac Asimov";
    print_rev(str);
    return (0);
}

4-print_rev.c

#include "main.h"

/**
 * print_rev - prints a string
 * @s: the string to be printed
 */

void print_rev(char *s)
{
        int i;

        while (s[i] != '\0')
        {
                i++;
        }
        while (i > 0)
        {
                _putchar(s[i-1]);
                i--;
        }
        _putchar('\n');
}
nhhxz33t

nhhxz33t1#

我意识到没有将迭代器i初始化为0是导致分段错误的原因。
所以我更新了我的4-print_rev.c到这个,我很好去。再次感谢@Vlad

#include "main.h"

/**
 * print_rev - prints a string
 * @s: the string to be printed
 */

void print_rev(char *s)
{
        int i = 0;

        while (s[i] != '\0')
        {
                i++;
        }
        while (i > 0)
        {
                _putchar(s[i-1]);
                i--;
        }
        _putchar('\n');
}

相关问题