摆脱字符串文字末尾的 \0 的最佳方法是什么?

what's the best way to get rid of the at the end of a string literal?

本文关键字:最佳 方法 是什么 文字 字符串      更新时间:2023-10-16

我正在尝试做类似的事情

strcmp(argv[3], "stdout")

但是,在命令行中我不想输入

stdout

摆脱字符串文字末尾的 \0 的最佳方法是什么?

谢谢!

更新:

谢谢大家。我发现我的代码出了什么问题...我应该使用

strcmp(argv[3], "stdout") == 0

谢谢@Nicol波拉斯

您不必在命令行上键入"stdout\0"。 无论系统以何种方式使命令行参数可用于进程(因操作系统而异),都会自动添加 null 字符。

如您所知,C 样式字符串以空字符结尾,该字符在代码中写为"\0"。 如果该字符不在字符串的末尾,则像 strcmp 这样的函数将继续远远超出字符串的末尾,因为这样的字符串蔑视约定。 但是,由于终止 null 字符是 C 约定,因此编译器足够智能,可以将 null 字符添加到字符串文本的末尾,并且系统足够智能,可以将 null 字符添加到存储在新创建的进程内存中的命令行参数中。 如果 argc 大于 3,并且在程序的命令行上键入的第三个参数是"stdout",则对 strcmp(argv[3], "stdout") 的调用将返回 0,表示两个字符串匹配。

在大多数情况下,

您不需要键入。字符串文本隐式追加了一个,将字符串数据存储到字符数组中的 C 函数将在末尾附加一个(这就是为什么其中许多函数的文档指定字符缓冲区必须有足够的空间来容纳字符串和 null 终止符)。

字符串文本由源字符集中的零个或多个字符组成,并用双引号 (") 括起来。字符串文本表示字符序列,这些字符组合在一起形成以 null 结尾的字符串。

strcmp 开始比较每个字符串的第一个字符。如果它们彼此相等,则继续以下对,直到字符不同或达到终止空字符。

所以你不需要在stdout末尾写,你需要将strcmp的返回值与0进行比较:

if (strcmp(argv[3], "stdout") == 0)