所以我正在用这段代码做标题所说的
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之前就遇到了分段错误。
答案 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标准。)