![](/img/trans.png)
[英]why this shows runtime error in ideone & visual studio but not in code blocks?
[英]Why this shows runtime error?
发生此问题时,我正在编写代码以创建自己的scanf
类型函数。 在控制台中测试以下代码后,它们可以完美工作。
#include <stdio.h>
#include <stdlib.h>
inline void fastint(int &x){
register int c = getchar();
x = 0;
for(; ((c<48 || c>57) && c != '-'); c = getchar());
for(; c>47 && c<58 ; c = getchar()){
x = (x<<1) + (x<<3) + c - 48;
}
}
inline void faststring(char * arr){
register char c = getchar();
register int i = 0;
while (c < 33)
c = getchar();
while (c != '\n'){
arr[i] = c;
c = getchar();
i = i + 1;
}
arr[i] = '\0';
}
int main(){
int i;
char * arr = (char*)malloc(20*sizeof(char));
fastint(i);
printf("number is %d\n",i);
// fprintf(stderr, "new format %d\n", that_pesky_x);
fastint(i);
printf("number is %d\n",i);
fastint(i);
printf("number is %d\n",i);
fastint(i);
printf("number is %d\n",i);
fastint(i);
printf("number is %d\n",i);
faststring(arr);
printf("string is %c\n",arr[3]);
faststring(arr);
printf("string is %c\n",arr[3]);
faststring(arr);
printf("string is %c\n",arr[3]);
faststring(arr);
printf("string is %s\n",arr);
faststring(arr);
printf("string is %s\n",arr);
faststring(arr);
printf("string is %s\n",arr);
return 0;
}
但是,当在文本文件(名为input.txt)上测试以上代码时,其内容为:
12
32
12
42
343
hello dear
how is life
it is good man
Yes, it is the one
Have been search for this
Really, it is the only one
并尝试使用Windows命令将输出保存到另一个文本文件(output.txt)
new_scan.exe <input.txt> output.txt
表示new_scan.exe has stopped working
。
可能是由于细分错误,但我无法弄清楚。 请帮助解决。
提前致谢!
首先,由于某些测试用例超过20个字节,因此需要增加阵列大小。
其次,由于您正在读取文件,因此需要检查EOF。 所以改变
while (c != '\n'){
// Do some work
}
至
while (c != '\n' && c != EOF){
// Do some work.
}
最后,您需要释放分配的内存以进行良好实践。
现在,您的代码应该可以正常工作了。
您的数组大小为20
个字节,但文本文件中的几个句子的长度超过20
字符(字节)。
访问未分配的内存可能会导致SEG故障。
可能存在的另一个问题是行定界符的结尾。 您已将\\n
检查为EOL,但可以采用\\r\\n
形式(CR-LF组合)。 因此,您还应检查\\r
作为分隔符。
另外,对您的建议是,您必须free
使用'alloc
系列函数分配的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.