gpt4 book ai didi

C_(视觉)_调试错误_运行时检查失败#2 -S

转载 作者:行者123 更新时间:2023-11-30 16:59:31 27 4
gpt4 key购买 nike

我想反转数组的数字,但我不明白为什么它没有运行。

感谢您解释调试错误_运行时检查失败#2 -S 的含义。

谢谢

#include <stdio.h>

int main()
{
int arr[] = { 1,2,3,4,5 };
int size, i, j;
int temp = 0;
size = sizeof(arr) / sizeof(arr[0]); //use this for changing size
printf("first_array :");
for (i = 0; i < size; i++)
{
printf("%d", arr[i]);
}
printf("\n");
for (i = 0; i <= (size / 2); i++)
{
j = size - i;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
printf("Riv_array :");
for (i = 0; i < size; i++)
{
printf("%d", arr[i]);
}

return 0;
}

最佳答案

在 C 中数组索引从 0 开始,并且您的数组有 5 个元素,因此 arr[4] 是最后一个元素,但您的代码:

j = size - i;
arr[j];

i=0访问arr[5]时,这是您的代码错误:数组索引越界

您应该使用j = size - i-1;来指向数组的最后一个元素,而不是j = size - i;
请参阅此工作示例(您的示例代码经过一些编辑):

#include <stdio.h>
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int size, i, j;
int temp = 0;
size = sizeof(arr) / sizeof(arr[0]); //use this for changing size
printf("first_array :");
for (i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
for (i = 0; i <= (size / 2); i++)
{
j = size - i - 1;
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
printf("Riv_array :");
for (i = 0; i < size; i++)
{
printf("%d ", arr[i]);
}

return 0;
}

使用指针反转数组的另一种方法:

#include <stdio.h>
void reverse(int* p, int count){
int temp;
int* q = p + count - 1; // point to the end
count /= 2;
while (count--) {
temp = *p;
*p++ = *q;
*q-- = temp;
}
}
void print_array(int *p, int count){
while (count--) printf("%d ", *p++);
printf("\n");
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int count = ((&arr)[1] - arr);
print_array(arr, count);
reverse(arr, count);
print_array(arr, count);
return 0;
}

输出:

1 2 3 4 5
5 4 3 2 1

关于C_(视觉)_调试错误_运行时检查失败#2 -S,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38089452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com