c - 将字符串元素复制到另一个字符串时出现分段错误
问题描述
为什么我会遇到分段错误?我在下面列出了我的代码。
请告诉是否有人知道我的错在这里,我该如何纠正?
我想在这里做什么
我试图将数字作为输入,对于它们,我必须输出一串字符。
问题
我提出的解决方案的代码
#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;
}
解决方案
char l[10000000];
这个巨大的数组正在溢出你的堆栈内存。
堆栈内存段是分配给自动变量的内存区域,它的大小相当小。在堆栈中拥有如此庞大的数组并不是一个好主意。尝试动态分配它,如下所示:
char *l;
l = malloc(10000000); //note: size of char is 1
l
这样,在堆段中分配的内存。一旦你完成它,请确保free
它。
或者,您可以创建l
一个全局变量或静态局部变量,以便它进入Data Segment。
推荐阅读
- ios - 上传应用程序更新时无法选择构建
- ios - 减小 SpriteKit 节点的大小
- c++ - c++ std::bad_alloc on std::filesystem::path append
- excel - 声明良好时出现错误“需要对象”
- c - 为什么C中的字符串数组在开头存储了一个空元素?
- codesys - Codesys 和 CANopen 多节点 ID
- python - 删除与数组中的元素不匹配的行
- excel - 如何在 VBA 中动态生成和填充列表框?
- java - Androids代码优化中SharedPreferences“commit()”会自动改成“apply()”吗?
- node.js - NodeJS中的多个等待调用错误处理