我正在研究一个C项目。我是C的新手,请原谅我,如果这是一个简单的问题。
我有一个char **
,它是一个包含各种值的数组。在所有值中,除了在strcmp上保持核心转储的值之外,我没有问题。
以下是我的代码:
if (strcmp(reportParameterArray[P_UNIQUECOLS],'Y') != 0)
{
//Do something
}
P_UNIQUECOLS
是一个枚举,它是从中检索值的索引。如果我查看GDB中的值,我可以看到它应该包含Y
或N
,但由于某种原因,应用程序崩溃了。
感谢您提供的任何帮助。
答案 0 :(得分:11)
使用"Y"
这是一个字符串文字而不是'Y'
这是char
字面值,因为strcmp()
需要两个const char*
个参数。
在高级别编译警告并且不要忽略它们(最好将它们视为错误)。
答案 1 :(得分:2)
'Y'
是单个字符,strcmp
需要一个指针。如果您的编译器没有给您至少一个警告,那么您没有使用正确的选项。
使用"Y"
代替'Y'
。
答案 2 :(得分:2)
是的,strcmp将两个参数都作为字符串。
如果应用程序崩溃,并且出现分段错误,则意味着您正在访问某些未经授权的内存位置。检查“reportParameterArray”是否已分配内存。