3

我正在做一个 C 项目。我是 C 新手,如果这是一个简单的问题,请原谅我。

我有一个char **包含各种值的数组。在所有值中,除了一个在 strcmp 上保持核心转储的值之外,我对这些值包含的内容没有任何问题。

下面是我的代码:

if (strcmp(reportParameterArray[P_UNIQUECOLS],'Y') != 0)
{
    //Do something
}

P_UNIQUECOLS是一个枚举,它是从中检索值的索引。如果我查看 GDB 中的值,我可以看到它包含YN应该包含但由于某种原因应用程序崩溃了。

感谢您的任何帮助,您可以提供。

4

3 回答 3

11

使用"Y"which 是字符串文字,而不是'Y'which 是char文字,因为strcmp()它需要两个const char*参数。

在高级别编译警告,不要忽略它们(最好将它们视为错误)。

于 2013-05-31T09:23:29.517 回答
2

'Y'是单个字符,strcmp需要一个指针。如果你的编译器至少没有给你一个警告,那么你没有使用正确的选项。

使用"Y"而不是'Y'.

于 2013-05-31T09:25:10.870 回答
2

是的, strcmp 将两个参数都作为字符串。

如果应用程序崩溃,并且出现分段错误,则意味着您正在访问一些未经授权的内存位置。检查“reportParameterArray”是否已分配内存。

于 2013-05-31T09:27:16.557 回答