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

时间:2013-02-03 03:30:01

标签: c++

我正在尝试做类似

的事情
strcmp(argv[3], "stdout")

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

stdout\0

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

谢谢!

更新

谢谢你们。我发现我的代码出了什么问题...我应该用

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

感谢@Nicol Bolas

3 个答案:

答案 0 :(得分:3)

你不必输入" stdout \ 0"在命令行上。无论您的系统使您的进程可以使用命令行参数(它因操作系统而异),都会自动添加空字符。

如您所知,C样式的字符串由空字符终止,该字符用代码写为' \ 0'。如果该字符不在字符串的末尾,那么诸如strcmp之类的函数将继续远远超出字符串的结尾,因为这样的字符串会违反惯例。但是,由于终止空字符是C约定,因此编译器足够聪明,可以将空字符添加到字符串文字的末尾,并且系统足够智能,可以将空字符添加到存储在字符串文件中的命令行参数中。记忆新创造的过程。如果argc大于3,并且您在程序的命令行上键入的第三个参数是" stdout",则对strcmp(argv[3], "stdout")的调用将返回0表示两个字符串匹配。

答案 1 :(得分:2)

在大多数情况下,您无需键入\0。字符串文字隐含地附加\0,并且将字符串数据存储到字符数组中的C函数将在末尾附加\0(这就是为什么许多这些函数的文档指定了字符缓冲区必须有足够的空间用于字符串和空终止符。)

答案 2 :(得分:2)

字符串文字由源字符集中的零个或多个字符组成,用双引号(“)括起来。字符串文字表示一个字符序列,它们一起形成一个以空字符结尾的字符串。

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

所以你不需要在\0的末尾写stdout,你需要比较strcmp0的返回值:

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