C获取字符串输入,并将其中一部分转换为整数

时间:2012-11-19 23:39:12

标签: c string int atoi

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

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和一些数字。

例如:i 27

然后程序应该认识到,如果是,那就是我,并且在i之后取数字。

变量初始化如下。

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

提前致谢。

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

3 个答案:

答案 0 :(得分:1)

你陷入无限循环。

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

添加指令x++;因此,您可以读取数组输入中的下一个元素,否则,您将被卡在x = 2的位置。

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

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

N是您希望在输入数组中拥有的元素数。

您正在获取segmentation fault,因为您正在尝试访问以前未分配的内存。

答案 1 :(得分: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,所以你从第3个位置开始char'2'(Char因为你把它作为一个字符串输入),它不是空终止符'\ 0'所以while循环将永远执行内部语句tempS[x - 2] = input[x];。所以要解决这个问题,你应该添加一个x修改类型:

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

答案 2 :(得分:1)

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

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

首先打开警告后修复编译器警告。要打开它们,你需要comppand line switch for compiler,对于gcc而言-W只是一个好的开始...虽然真正的男人至少使用-W -Wall -pedantic -std=c11进行编译(用c11替换任何版本您要使用的C标准。)