gpt4 book ai didi

c - IDEONE 字符串操作的奇怪输出

转载 作者:行者123 更新时间:2023-11-30 20:40:00 24 4
gpt4 key购买 nike

有人可以告诉我为什么会发生这种情况吗?这里出了什么问题:

我必须打印字符串的一部分,其中要打印的字符串的起始位置和长度在输入中给出。

问题:当我在 devC++ 中运行它时,一切都运行良好并且输出正常。当我在 IDEONE 中运行它时,代码[从字符数组]不会产生输出,除非我使用 printf("%s\n",abc); 打印整个字符串;

---> 当我不使用 printf("%s\n",abc); 时http://ideone.com/BMjCku

#include<stdio.h>
#include<ctype.h>

int main()
{
long long int q;
int length=0;
scanf("%lld",&q);
while(q--)
{
int loc,cutlength=0,k=0,pos,plen=0;

char abc[100001],save[100001],c;
while(1)
{
scanf("%c",&c);
if(c=='+' || c=='?')
break;
}
if (c=='+')
{
scanf("%d",&loc); pos=loc;
cutlength=length-loc;
for(int i=loc;i<=length-loc;i++)
save[k++]=abc[i];
scanf("%c",&c);
while(!isalpha(c))
scanf("%c",&c);
while(1)
{
if(!isalpha(c))
break;
abc[loc++]=c; length++;
scanf("%c",&c);
}
length+=pos+cutlength;
for(int i=0;i<k;i++)
abc[loc++]=save[i];
}

else if(c == '?')
{
if(&abc[0] == &abc[0]);
scanf("%d%d",&loc,&plen);
loc--;
while(plen--)
printf("%c",abc[loc++]);
printf("\n");
//printf("%s\n",abc);
}
}
return 0;
}

---> 当我使用 printf("%s\n",abc); 时http://ideone.com/Y6Sh5K

最佳答案

c == '?' block 中的代码在未初始化时使用数组 abc

您似乎认为当您进入下一个循环迭代时,由 c == '+' block 放入 abc 的数据应该保留。然而事实并非如此:abc 对于 while(q--) { 打开的 block 来说是本地的,因此每次循环迭代它都会被销毁并重新创建。

它可能在 Dev-C++ 上工作,因为它不进行检查,并且每次都重复使用同一 block 内存。

我猜您想将循环开始时的部分或全部变量声明移至循环之前。

关于c - IDEONE 字符串操作的奇怪输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24979518/

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