第一个循环用作无限循环

first loop use as an Infinite loop

本文关键字:无限循环 循环 第一个      更新时间:2023-10-16

为什么第一个循环用作无限循环?这里的int t始终是一个正数。z的值每次迭代都在增加,之后,它将等于 t,循环将终止。但在运行时,循环用作无限循环。

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
    int t;  /// t always a positive number
    scanf("%d",&t);
    int z=0;
    while(z!=t) ///first loop
    {
        string s;
        int r,n;
        cin>>s>>r>>n;
        int l=0,i,j,k=0;
        while(s[l]!='')
            l++;
        for(i=0;i<r;i++)
        {
            l=l*2;
            char a[l];
            for(j=0;j<l/2;j++)
            {
                if(s[j]=='1')
                {
                    a[k]='1';
                    a[k+1]='0';
                }
                else
                {
                    a[k]='0';
                    a[k+1]='1';
                }
                k+=2;
            }
            int m=0;
            while (a[m]!='')
            {
                s[m]=a[m];
                m++;
            }
        }
        cout<<s[n]<<endl;
        z++;
    }
    return 0;
}

我的猜测是,无限循环可能不是外部循环while(z!=t),而是内部循环

while (a[m]!='')
{
    s[m]=a[m];
    m++;
}

因为您检查 NUL 字符,但从不将任何a[]字符设置为

因此,可能会出现缓冲区溢出,最终会导致核心转储。