2013-02-03 38 views
0

我试图做类似什么是最好的方式来摆脱字符串文字末尾的 0?

strcmp(argv[3], "stdout") 
然而

,在命令行中我不想键入

stdout\0 

什么是获得在摆脱\ 0的最佳方式字符串文字的结尾?

谢谢!

更新:

谢谢你们。我发现有什么错我的代码...我应该用

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

感谢@Nicol流星锤

+3

NULL终止符不用作比较的一部分。如果你确实删除了它,那么strcmp将不知道何时停止。尝试描述你遇到的实际问题。 –

+0

@RetiredNinja我正在尝试“.a.out stdout”。在我的代码中,我做了if(strcmp(argv [1],“stdout”))。它不起作用。它只适用于我在命令行中输入“.a.out stdout \ 0” – JASON

+0

我假设,在'。/'部分,你使用的是某种形式的Linux/Unix shell,是的? –

回答

3

您不必键入“标准输出\ 0”的命令行。无论您的系统如何使命令行参数可用于您的进程(它因操作系统而异)都会自动添加空字符。如你所知,一个C风格的字符串被空字符终止,该字符在代码中被写为'\ 0'。如果该字符不在字符串的末尾,那么函数(如strcmp)将继续超出字符串的末尾,因为这样的字符串不成立。但是,由于终止空字符是C约定,编译器足够聪明,可以将空字符添加到字符串文本的末尾,并且系统足够聪明,可以将空字符添加到存储在命令行参数中记忆一个新创建的过程。如果argc大于3,并且在程序的命令行中输入的第三个参数是“stdout”,则调用strcmp(argv[3], "stdout")将返回0,表示这两个字符串匹配。

2

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

2

字符串文字由来自源代码字符集零个或多个字符由双引号(“)包围。字符串文字表示,加在一起的字符序列,形成一个空终止字符串。

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

因此,您不需要在stdout的末尾写\0,则需要比较返回值strcmp0

if (strcmp(argv[3], "stdout") == 0) 
相关问题