static char a[255] = "\0";
and
const char *b = " ";
现在当我分配“abc”a和b,对于一个留存252字节停留'\ 0'和b它不是那样的。所以,当我试图比较它们时,它们会变得不同。 一个解决方案就是像strncmp()那样比较sizeof(b)。 还有其他的方式吗?可能通过转换一个到另一个?比较静态字符[]和常量字符*
在此先感谢。
static char a[255] = "\0";
and
const char *b = " ";
现在当我分配“abc”a和b,对于一个留存252字节停留'\ 0'和b它不是那样的。所以,当我试图比较它们时,它们会变得不同。 一个解决方案就是像strncmp()那样比较sizeof(b)。 还有其他的方式吗?可能通过转换一个到另一个?比较静态字符[]和常量字符*
在此先感谢。
这是因为b
不有“剩余的252个字节”。 b
被创建为指向内存的指针,其中包含两个字符<space>
和<nul>
,而不是别的。
当你分配到b
,你实际上改变指针在四个大字a
,b
,c
和<nul>
点,但仍然什么都没有,你可以放心地使用之后。
strcmp
是比较C字符串接受的方式,尽管那些娇媚strncmp
-loving类型的告诉你,这是不安全的*一个,但他们没有权利在第一时间用C编码:-)
*一个这是不安全的,如果你的字符串可能不是空值终止。但是,如果它们不是空终止的,它们在技术上不是字符串。对于处理字符串,strcmp
是正确的工具。
+1对于“如果他们不是空终止,他们不是技术上的字符串”。 – 2010-10-29 13:56:06
那么,首先你不想给b分配“abc”。当您更改该值时,它将导致C风格字符串的内存泄漏。
要比较你想使用strcmp函数。它在图书馆。
你如何比较字符串? STRCMP()? – Kel 2010-10-29 05:53:07
因为首先声明,而你初始化,然后你重新声明,把“A”,“B”,“C”,什么地方该数组中,当初始化时声明就像你做了什么,您将所有的数组元素到字符而当你指定一个,b和c,你将它们分配给阵列中的一些特定元件。 – 2010-10-29 14:31:11