【发布时间】:2014-07-27 09:11:04
【问题描述】:
谁能告诉我为什么会这样,这里出了什么问题:
我必须打印字符串的一部分,其中要打印的字符串的起始位置和长度在输入中给出。
问题: 当我在 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
【问题讨论】:
-
建议一:总是测试
scanf()的返回值:if (scanf(WHATEVER, &#1, ..., &#n) != n) /* error */; -
@n.m.但这段代码有
printf("\n");。 -
我还没有阅读完整的代码,但你正在阅读
abc之前的任何内容。这是未定义的行为。 -
if(&abc[0] == &abc[0]);到底是为了什么