室友编写了关于一个二级指针与二维字符串数组的程序,但是老是报段错误,不明就里,让我帮忙调试。我根据他的程序出理的问题,写了另外一个简单一点的程序,来了解问题所在,程序如下:
运行gcc -W b.c -o b,会产生警告信息:
运行: ./b,果断报段错误了。
之所以会报警告错误,原因在于c语言的多维数组实际上是数组的数组,a与b的类型并不匹配,a是一个具有两个元素的数组,数组的元素是具有两个char元素的数组;而b是一个二级指针,它只是一个指向一维数组的指针,数组的元素都为char*。但是b是一个指针,它需要一个地址来赋值,而a刚好能提供一个地址值,因此编译器只是提出了警告而没有报错。
在运行程序报了段错误后,果断地用gdb进行调试,结果出现了令人费解的问题:
gcc -W b.c -o b
gdb ./b