【问题标题】:command not found followed by segmentation fault 11未找到命令,后跟分段错误 11
【发布时间】:2017-05-09 16:03:12
【问题描述】:

我正在尝试制作一个可以获取类似输入的程序

   1     833N619DL  ABQ           26     204     214    1250
   1    1125N660DL  ABQ           18     211     204    1250
   1    1589N678DL  ABQ           23     206     212    1250
   2     833N659DL  ABQ           18     204     194    1250
   2    1125N656DL  ABQ           23     211     210    1250
   2    1589N665DN  ABQ           19     206     212    1250
   3     833N686DA  ABQ           23     204     204    1250
   3    1125N692DL  ABQ           27     211     216    1250
   3    1589N635DL  ABQ           26     206     210    1250
   4     833N688DL  ABQ           21     204     206    1250
   4    1125N660DL  ABQ           18     211     221    1250
   4    1589N631DL  ABQ           28     206     209    1250

此数据只输出输入中的数字(不包括数字和字母混合的列)

这是我的程序

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

#define MAXLINE 10000

char *itoa(int i);                  //convert integer to char array

main() {
    int temp= 0, i = 0, c, j = 0;
    char *a[MAXLINE];               //pointer array with uninitialized pointers

while((c = getchar()) != EOF)
    if(isdigit(c))
        temp = 10 * temp + c - '0';
    else if(!isalpha(c)) {
        a[i] = itoa(temp); 
        ++i;

        if(c == '\n') {
            *a[i] = '\n';
            j++;
        }
    }

    printf("Data is\n");

    for(int n = 0; n <= j; n++)
        printf("%s\n", a[n]);
}

char *itoa(int i) {

    char *s;

    while(i % 10 != 0) {
        *s++ = i / 10;            //save to s
        i = i % 10;               //removed saved part from i
}

    return s;
}

我编译它并给出了上面的数据。我应该按 control-D 告诉程序我已完成输入(EOF),但程序以分段错误 11 响应,然后,终端开始接受我的输入,就好像我这样写它们:

urw7RS:Desktop urw7rseeh8fr$        1    1125N660DL  ABQ           18     211     204    1250

终端告诉我找不到该命令。 这是输出:

urw7RS:Desktop urw7rseeh8fr$ ./a.out
   1     833N619DL  ABQ           26     204     214    1250
   1    1125N660DL  ABQ           18     211     204    1250
   1    1589N678DL  ABQ           23     206     212    1250
   2     833N659DL  ABQ           18     204     194    1250
   2    1125N656DL  ABQ           23     211     210    1250
   2    1589N665DN  ABQ           19     206     212    1250
   3     833N686DA  ABQ           23     204     204    1250
   3    1125N692DL  ABQ           27     211     216    1250
   3    1589N635DL  ABQ           26     206     210    1250
   4     833N688DL  ABQ           21     204     206    1250
   4    1125N660DL  ABQ           18     211     221    1250
   4    1589N631DL  ABQ           28     206     209    1250
Segmentation fault: 11
urw7RS:Desktop urw7rseeh8fr$        1    1125N660DL  ABQ           18     211     204    1250
-bash: 1: command not found
urw7RS:Desktop urw7rseeh8fr$        1    1589N678DL  ABQ           23     206     212    1250
-bash: 1: command not found
urw7RS:Desktop urw7rseeh8fr$        2     833N659DL  ABQ           18     204     194    1250
-bash: 2: command not found
urw7RS:Desktop urw7rseeh8fr$        2    1125N656DL  ABQ           23     211     210    1250
-bash: 2: command not found
urw7RS:Desktop urw7rseeh8fr$        2    1589N665DN  ABQ           19     206     212    1250
-bash: 2: command not found
urw7RS:Desktop urw7rseeh8fr$        3     833N686DA  ABQ           23     204     204    1250
-bash: 3: command not found
urw7RS:Desktop urw7rseeh8fr$        3    1125N692DL  ABQ           27     211     216    1250
-bash: 3: command not found
urw7RS:Desktop urw7rseeh8fr$        3    1589N635DL  ABQ           26     206     210    1250
-bash: 3: command not found
urw7RS:Desktop urw7rseeh8fr$        4     833N688DL  ABQ           21     204     206    1250
-bash: 4: command not found
urw7RS:Desktop urw7rseeh8fr$        4    1125N660DL  ABQ           18     211     221    1250
-bash: 4: command not found
urw7RS:Desktop urw7rseeh8fr$        4    1589N631DL  ABQ           28     206     209    1250
-bash: 4: command not found
urw7RS:Desktop urw7rseeh8fr$ 

我做错了什么?

【问题讨论】:

  • 在您的程序因分段错误而中止后,“找不到命令”来自 shell。我猜你用鼠标缓冲区粘贴了输入,而剩余的输入不能被中止的程序处理,所以它被粘贴到了 shell 中。
  • char *a[MAXLINE]; //pointer array to store data -->> char *a[MAXLINE]; //pointer array with uninitialised pointers 你正在将整数存储到其中)*a[i] = '\n'; 是错误的,它分配给一个未初始化的指针。 a[i] = itoa(temp);:: 同上
  • 您永远不会在 itoa 中初始化或为 s 提供存储空间。
  • 缩进你的代码.....@user441343
  • 与您的问题无关,更喜欢!isalpha(c) 而不是~isalpha(c)。前者运算符是逻辑否定,后者是按位补码。例如,请参阅stackoverflow.com/questions/11572181/not-vs-negation

标签: c bash


【解决方案1】:

似乎终端是解释您的数据而不是处理它,因此它会尝试像执行命令一样执行每一行,并且没有像引导您的每一行的数字这样的命令文件。您确定您正在执行您的程序而不是包含您的数据的文件吗?

此外,您的所有char* 指向字符串的指针都没有分配,所以您得到Segmentation fault

【讨论】:

    猜你喜欢
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 2015-12-16
    • 1970-01-01
    相关资源
    最近更新 更多