为什么我的代码出现运行时错误
why is my code giving a run time error?
根据我的说法,代码很好。我试着逐行调试它,但出乎意料的是,这段代码给了我一个运行时错误,我不明白为什么这段代码会出现这样的错误。有人能检查一下我在这里使用的字符串函数吗?如果可能的话,请告诉我这个程序为什么会出现运行时错误?此代码的表意链接为http://ideone.com/LyFTWu
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
int t,i;
//printf("md");
scanf("%d",&t);
for(i=0;i<t;i++)
{
int n,j,k,f,g=0;
char a[50][57],c[50];
//printf("me");
scanf("%d",&n);
//printf("%d",n);
//m=getchar();
//printf("men");
getchar();
for(j=0;j<n;j++)
{
k=0;
while(1)
{
a[j][k]=getchar();
//printf("%c",a[j][k]);
if(a[j][k]=='n') break;
k++;
}
//printf("men");
}
for(j=n-1;j>=0;j--)
{
k=0;
g=0;
if(j==n-1)
{
printf("Begin ");
}
else if(a[j+1][0]=='L')
{
printf("Right ");
}
else if(a[j+1][0]=='R')
{
printf("Left ");
}
while(1)
{
while(a[j][k]!='o'&&g==0)
{
k++;
}
g=1;
//printf("me");
if(a[j][k]=='n') break;
printf("%c",a[j][k]);
k++;
}
printf("n");
}
}
return(0);
}
我看到的一件事是,您在while(a[j][k])
中访问的数组whith k==-1,这不是一个合法的索引。
以下是我发现的一些东西:
- 使用
scanf()
需要检查它是否成功读取字段,例如使用scanf("%d", &n) == 1
并适当处理这两个结果 - 如果CCD_ 4,则第一循环访问值超出CCD_
- 如果线路比
57
长,则对a[j][k]
的访问也超出范围 a[j][k]
在另一端被超出范围的k == -1
访问- 如果行上没有
t
字符,则以f == 0
开头的嵌套while
循环可以访问所有超出范围的值
我想,如果我更仔细地看这一团糟,我可能会发现更多的错误。。。
while(f==0&&a[j][k]!='t')
从来都不是真的(可能是,但不是在你的输入中——除非你有其他输入,而不是在你链接的网站上(
这显然是一个问题,因为你会超出缓冲区的末尾,并继续前进,直到出现其他问题。
我在"模糊C竞争"中的工作条目(是的,我相信它可以变得更模糊,我把它减少到397个字符,但决定使用这个变体,因为它可以更有趣地使用宏(:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define L "Left"
#define R "Right"
void s(int*p){if(scanf("%d ",p)!=1)exit(1);}
#define c(a,c)if(!strncmp(a,r[i],c))
#define f(a,b,c)for(i=a;i b;i c##c)
int main(void){int t,n,i,o;char r[40][51],*x,*d;s(&t);while(t--){s(&n);
f(0,<n,+)fgets(r[i],50,stdin);d="Begin";f(n-1,>-1,-){o=5;c(L,4)o=4,x=R;
else c(R,5)x=L;printf("%s%s",d,r[i]+o);d=x;}puts("");}return 0;}
它相当安全(如果你输入了错误的输入tho’,就不会说太多,如果行比点画的长,就会做"奇怪"的事情(。我应该添加一个检查if(t>40(exit(1(;可能
请随意适当缩进,并尝试弄清楚它是如何工作的。;(
相关文章:
- 为什么此代码存在运行时错误?
- 蝴蝶代码 88.合并排序数组 c++ 运行时错误
- 在Hackerearth上获取运行时错误(SIGSEGV),无法找出代码中的问题
- 为什么我在此代码中收到运行时错误
- 我的代码上的运行时错误 sigsegv
- 矢量的 c++ 代码中的运行时错误
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 我的代码中出现运行时错误的可能原因是什么?
- 我在代码中收到一个运行时错误,该错误如何通过修改最多一个元素来查找数组是否可以变得不减少
- 在计算机级别,应用程序以二进制方式运行,然后当发生运行时错误时,它如何呈现回错误代码
- .NET CORE 2 DLL引用带有C 代码运行时错误
- 为什么我的代码给出运行时错误超时
- 为什么我的程序在删除以下代码中的注释后会出现运行时错误?
- 薄板样条形状转换运行时错误 [使用代码 -1073741819 退出]
- C 代码的运行时错误(基于指针)
- 代码中的运行时错误,用于求解最小的偶数可整除
- 为什么我的代码导致运行时错误
- 为什么矢量上的这段代码会给出运行时错误
- 涉及向量的初学者代码,SEIGSEV运行时错误
- 为什么这段代码会产生运行时错误