_tcsnicmp和_tcsncicmp有什么区别?

3

微软文档显示,_tcsnicmp_tcsncicmp(注意额外的c)都是TCHAR.H对_strnicmp进行字符串比较的等效方法。我不确定应该使用哪一个。

这两种方法有什么区别呢?

我最好的猜测是,nc版本以字符数为计数,而n版本以字节数为计数。

2个回答

5
所有的_tcs函数实际上都是宏,根据构建时定义的_UNICODE_MBCS宏的不同,将解析为相应的等效函数。
查看文档,这两个函数除了在定义_MBCS时的情况下有所不同,此时它们将解析为_mcsnicmp_mbsnbicmp。正如您所说,它们之间的区别在于计数是按字符还是按字节。

-1
在我看来,你应该都不使用。
以下划线开头的标识符只应由编译器/实现使用,而不应在正常代码中使用。
也许你可以更详细地说明一下你想做什么?

2
不同意“以下划线开头的标识符只应由编译器/实现使用”的说法,在 Visual C++ 中有很多从 prosix 中引用的函数,名称相同但是以下划线开头(如 _read()_write()_access()_pipe()...)。 - Mihran Hovsepyan
我正在尝试进行不区分大小写的Unicode兼容字符串比较。strcmp的不区分大小写版本是_stricmp。我不知道为什么他们添加了一个下划线,但我认为这与编译器/非编译器使用无关。 - Mashmagar
@Mihran Hovespyan:那么微软正在违反标准,但是我不在乎,这已经不是第一次了。因此请忽略我的回答(在微软的论坛上我看到人们推荐这个函数)。 - orlp
@nightcracker 为什么你说 Microsoft 违反了标准?你是指 C++ 的 ISO 标准吗? - Mihran Hovsepyan
4
@nightcracker 您误解了这个限制。“Reserved”并不意味着您不能使用这样的符号,只是不能定义一个。这种区别微妙但很重要。微软采用这种约定以确保他们的库扩展不会与用户定义的符号或标准的后续修订发生冲突。 - Mark Ransom
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接