0

所以我正在用这段代码做标题所说的

else if(input[0] == 'i'){
        printf("This works");
        if(isspace(input[1])){
            x = 2;
            while(input[x] != '\0'){
                tempS[x - 2] = input[x];
            }
            inp = atoi(tempS);
            for(x = x-2; x >= 0; x--){
                tempS[x] == NULL;
            }
            insert(&linkedList, inp);
            printf("%i %s %c", inp, " sucessfully inserted.", '\n');
        }
    }

您可以忽略插入,基本上我得到的用户输入应该是 i 和一些数字。

例如:我 27

然后程序应该在 else if 中识别出它是 i,并取 i 后面的数字。

变量初始化如下。

char *input;
int inp = 0;
int x = 0;
char *tempS[255];

提前致谢。

编辑:问题是我什至在 printf 之前就遇到了分段错误。

4

3 回答 3

1

while 循环的问题:它永远不会结束,因为它不会增加 x。它不会复制'\0',因此atoi可能会崩溃。input是 char 数组,但是tempS是 char 指针数组。

我不会立即看到崩溃的原因,除非input[2]实际上是'\0'并且 while 循环结束,在这种情况下atoi,当你给它无意义的指针数组而不是字符串时,它就是崩溃的原因。考虑到您显示的此代码的损坏程度,崩溃可能出现在您未显示的代码中...

在打开警告后,首先修复编译器警告。要打开它们,您需要编译器的 comppand 行开关,因为 gcc 只是-W一个好的开始......虽然真正的男人至少可以编译-W -Wall -pedantic -std=c11(替换c11为您想要使用的任何 C 标准版本)。

于 2012-11-19T23:55:38.410 回答
1

你陷入了一个无限循环。

 while(input[x] != '\0')
 {
          tempS[x - 2] = input[x];
 }

添加指令x++;这样你就可以读取数组输入中的下一个元素,否则,你会卡在 x = 2 的位置。

这个char *input;它只是一个指针,您必须像当前使用的那样分配内存才能使用它。请执行下列操作:

input = malloc(sizeof(char) * N);

N 是您希望在输入数组中包含的元素数。

你得到segmentation fault是因为你试图访问以前没有分配的内存。

于 2012-11-19T23:46:19.767 回答
1

您必须使用 malloc 为输入指针分配内存(保留内存)。就像是:

char *input = malloc( sizeof(char) * 128 ); //If you needs 128 positions

看一看:

//  *---*---*---*---*------*
//  | i |   | 2 | 1 | \'0' |
//  *---*---*---*---*------*
//            ^----- You stay here.

while(input[x] != '\0'){
    tempS[x - 2] = input[x];
}

你声明x = 2了 ,所以你从第三个位置开始 char '2' (Char 因为你输入它作为一个字符串),它不是空终止符 '\0' 所以 while 循环将tempS[x - 2] = input[x];永远执行内部语句。所以要解决这个问题,你应该添加一个 x 修改类型:

while(input[x] != '\0'){
    tempS[x - 2] = input[x];
    x++;
}
于 2012-11-19T23:46:32.853 回答