繁体   English   中英

为什么这显示运行时错误?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM