gpt4 book ai didi

c - 为什么增值如此不确定?

转载 作者:行者123 更新时间:2023-11-30 21:15:10 27 4
gpt4 key购买 nike

我正在代码块上编写此代码(只有我拥有的编译器)。当我遇到这种行为时。请有人建议为什么 ct 会发生这种情况,我是否遗漏了一些东西。

#include <stdio.h>
int main(int argc,char* argv[])
{
int lov[3][2]={0};
int ct=0;
char* art;
if(argc!=4)
return 1;


art=argv[1];
do
{
if(*art=='L' & *(art+1)=='o' & *(art+2)=='c')
{
printf("\n\n (art+3)=%s ,*(art+3)=%c ,*(art+5)=%c",(art+3),*(art+3),*(art+5) );
lov[ct][ct]=*(art+3)-48;
lov[ct][ct+1]=*(art+5)-48;
printf("\nct=%d,lov[x][x]=%d,lov[x][x+1]=%d ",ct,lov[ct][ct],lov[ct][ct+1]);
ct++;
}
art+=3;
}
while(*(art++));
getchar();
}

在命令提示符下:-

>Resol.exe Loc2,5 Loc3,8 Loc5,4
Output:-


(art+3)=2,5 ,*(art+3)=2 ,*(art+5)=5
ct=0,lov[x][x]=2,lov[x][x+1]=5

(art+3)=3,8 ,*(art+3)=3 ,*(art+5)=8
ct=1,lov[x][x]=3,lov[x][x+1]=8

(art+3)=5,4 ,*(art+3)=5 ,*(art+5)=4

ct=5,lov[x][x]=4198582

,洛夫[x][x+1]=4

为什么ct变成5???(最后一行)

最佳答案

由于您越界访问 lovct 似乎被覆盖。您的编译器可能将 ctlov 在堆栈上彼此靠近放置,这就是 ct 被错误修改的原因。

ct等于1时,您写入lov[ct][ct+1],即lov[1] [2]。那是越界的。但下一次您写入 lov[2][2]lov[2][3] 时,其中一个将导致修改ct

当您编写lov[ct][ct+1]时,只能对ct == 0有效。 ct 的所有其他值都会导致数组访问越界。

鉴于此代码的困惑性质,如果存在其他此类错误,我不会感到惊讶。

关于c - 为什么增值如此不确定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8883459/

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