2010-10-29 72 views
2
static char a[255] = "\0"; 
and 
const char *b = " "; 

现在当我分配“abc”a和b,对于一个留存252字节停留'\ 0'和b它不是那样的。所以,当我试图比较它们时,它们会变得不同。 一个解决方案就是像strncmp()那样比较sizeof(b)。 还有其他的方式吗?可能通过转换一个到另一个?比较静态字符[]和常量字符*

在此先感谢。

+0

你如何比较字符串? STRCMP()? – Kel 2010-10-29 05:53:07

+0

因为首先声明,而你初始化,然后你重新声明,把“A”,“B”,“C”,什么地方该数组中,当初始化时声明就像你做了什么,您将所有的数组元素到字符而当你指定一个,b和c,你将它们分配给阵列中的一些特定元件。 – 2010-10-29 14:31:11

回答

6

这是因为b“剩余的252个字节”。 b被创建为指向内存的指针,其中包含两个字符<space><nul>,而不是别的。

当你分配b,你实际上改变指针在四个大字abc<nul>点,但仍然什么都没有,你可以放心地使用之后。

strcmp是比较C字符串接受的方式,尽管那些娇媚strncmp -loving类型的告诉你,这是不安全的*一个,但他们没有权利在第一时间用C编码:-)


*一个不安全的,如果你的字符串可能不是空值终止。但是,如果它们不是空终止的,它们在技术上不是字符串。对于处理字符串,strcmp是正确的工具。

+0

+1对于“如果他们不是空终止,他们不是技术上的字符串”。 – 2010-10-29 13:56:06

1

那么,首先你不想给b分配“abc”。当您更改该值时,它将导致C风格字符串的内存泄漏。

要比较你想使用strcmp函数。它在图书馆。