首页 > 解决方案 > 将字符串元素复制到另一个字符串时出现分段错误

问题描述

为什么我会遇到分段错误?我在下面列出了我的代码。

请告诉是否有人知道我的错在这里,我该如何纠正?

我想在这里做什么

我试图将数字作为输入,对于它们,我必须输出一串字符。

问题

问题的链接在这里。

我提出的解决方案的代码

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

int main() {

    long long int n, k;
    char manku[] = { 'm', 'a', 'n', 'k', 'u' };
    char l[10000000];
    int t, i = 0, j, p;
    scanf("%d", &t);

    while (t > 0)
    {
        scanf("%lld", &n);

        while (n > 0)
        {
            j = n % 5;
            if (j == 0)
                l[i] = manku[4];
            else
                l[i] = manku[j - 1];

            n = n / 5;
            i++;
        }

        p = strlen(l);

        for (i = 0; i < p; i++)
            l[i] = l[p - 1 - i];

        for (i = 0; i < p; i++)
            printf("%c", l[i]);

        t--;
    }

    return 0;
}

标签: csegmentation-fault

解决方案


char l[10000000];

这个巨大的数组正在溢出你的堆栈内存。
堆栈内存段是分配给自动变量的内存区域,它的大小相当小。在堆栈中拥有如此庞大的数组并不是一个好主意。尝试动态分配它,如下所示:

char *l;
l = malloc(10000000);  //note: size of char is 1

l这样,在堆段中分配的内存。一旦你完成它,请确保free它。

或者,您可以创建l一个全局变量或静态局部变量,以便它进入Data Segment


推荐阅读