为什么 strcmp 不能将两个看似相等的字符串识别为相同?

Why doesn't strcmp recognize two seemingly equal strings as the same?

下面是 Matlab 控制台的输出。两个字符串相同:'@TBMA3'。然而,比较它们时,Matlab 的 strcmp 函数 returns 0。为什么?

K>> str='@TBMA3'
str =
@TBMA3

K>> method.fhandle
ans = 
@TBMA3

K>> strcmp(method.fhandle, str)
ans =
     0

最可能的原因是method.fhandle不是字符串,而是函数句柄。检查 class(method.fhandle) 是否给出

ans =
function_handle

在这种情况下,比较结果为 0,因为字符串 (str) 不能等于函数句柄 (method.fhandle)。

为了检查相等性,您需要将 method.fhandle 转换为字符串,或将 str 转换为函数句柄。第一个选项是不够的,因为 char(function_handle) 会给出 'TBMS3',没有 '@'。所以使用第二个选项,并使用 isequal:

进行比较
isequal(method.fhandle, str2func(str))

应该给1.

这个 isequal 比较有效,因为 method.fhandlestr2func(str) 都指向同一个已经定义的函数TBMA3。与 f = @(x)x; g = @(x)x, isequal(f,g) 比较,得到 0。这种行为是 explained in the documentation。感谢@knedlsepp 帮助澄清这一点。