Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Strcmp的C分段故障_C_Segmentation Fault - Fatal编程技术网

使用Strcmp的C分段故障

使用Strcmp的C分段故障,c,segmentation-fault,C,Segmentation Fault,我正在写一个程序,检查C中不同类型的括号是否匹配,我是C新手,所以我知道分段错误与内存有关,但不确定如何解决我的问题 预期的输出将是有人输入测试字符串,例如,如果打印失败,则输入成功。 谢谢您的代码问题很可能是由编译器的警告确定的:您应该看到很多警告,告诉您正在将char传递给一个需要char*的函数 strcmp函数需要C字符串,而不仅仅是char*,这意味着字符串的最后一个字符后面应该有一个空终止符。这就是为什么即使传递了指向单个字符的指针,也会失败 如果要比较单个字符,只需一个普通的==:

我正在写一个程序,检查C中不同类型的括号是否匹配,我是C新手,所以我知道分段错误与内存有关,但不确定如何解决我的问题

预期的输出将是有人输入测试字符串,例如,如果打印失败,则输入成功。

谢谢

您的代码问题很可能是由编译器的警告确定的:您应该看到很多警告,告诉您正在将
char
传递给一个需要
char*
的函数

strcmp
函数需要C字符串,而不仅仅是
char*
,这意味着字符串的最后一个字符后面应该有一个空终止符。这就是为什么即使传递了指向单个字符的指针,也会失败

如果要比较单个字符,只需一个普通的
==

if(test_string[x] != '[')
    ...

我看到的问题是

1) 您正在使用strcmp,但正在将字符串与char进行比较

2) 括号数组的宽度为20个字符。如果超过20个连续的开口支架,将导致seg故障

3) 在处理右括号时,只需与前面的索引(i-1)匹配即可。现在,下面的顺序将产生一个问题 []]]
这里,在前两个括号之后,i变为0,之后,您将尝试访问括号[-1],这是数组超出范围的问题,可能导致seg故障。

strcmp
使用两个字符串。两个字符可以正常比较。如果你a)阅读手册页b)打开编译器的所有警告,例如gcc-Wall c)注意这些警告注意:
,而(x<(int)(strlen(test_string)-1)){
是次优(且难看)