[英]adding a 0 char after every even number in an array C
我正在尝试在C中创建一个程序,该程序在每个偶数之后都将添加一个“ 0”。 但是我有一个问题。 例如,如果我仅插入偶数(5个或更多数字),程序将崩溃。
以下是我现在拥有的程序。
我想要一些指示或代码示例来指出我做错了什么以及如何解决。
void main()
{
int *a, i, n, m;
printf("dimensiune=");
scanf_s("%d", &n);
a = (int*)malloc(n*sizeof(int));
for (i = 0; i < n; i++)
{
printf("a[%d]=", i + 1);
scanf_s("%d", &a[i]);
}
for (i = 0; i < n; i++)
{
if (a[i] % 2 == 0)
{
n++;
a = (int*)realloc(a, n*sizeof(int));
for (m = n - 1; m > i;m--)
{
a[m + 1] = a[m];
}
a[i + 1] = 0;
i++;
}
}
printf("\n currently you have %d numbers in this string\n", n);
printf("your string \n");
for (i = 0; i < n; i++)
{
printf("a[%d]=%d\n", i + 1, a[i]);
}
}
更改:
for (m = n - 1; m > i;m--)
{
a[m + 1] = a[m];
}
至:
for (m = n - 1; m > i;m--)
{
a[m] = a[m-1];
}
我刚刚测试过,它对我有用,应该对您有用。
我看到此循环有问题:
for (m = n - 1; m > i;m--)
{
a[m + 1] = a[m];
}
启动循环时,n是循环中元素的数量。 在第一次迭代中,m是循环最后一个元素的索引。 因此, m+1
在最后一个元素之后,从而导致缓冲区溢出。
感谢所有评论,我解决了用int main(void)替换void main()和Shady Programmer提供的解决方案的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.