static char a[255] = "\0";
and
const char *b = " ";
现在当我将“abc”分配给a和b时,对于一个剩余的252字节保持'\ 0'而对于b则不是那样的。因此,当我尝试比较它们时,它们会变得不同。 一种解决方案是直接比较(b)sizeof(和strncmp())。 这样做还有其他办法吗?可能是将一个转换为另一个?
提前致谢。
答案 0 :(得分:6)
那是因为b
<剩余252字节“。 b
被创建为指向内存的指针,其中包含两个字符<space>
和<nul>
,而不包含任何内容。
当您将分配给b
时,实际上您将指针更改为指向四个字符a
,b
,c
和{ {1}},但在那之后仍然没有什么可以安全使用的。
<nul>
是比较C语言中字符串的可接受方式,尽管那些表示不安全 * a 的namby-pamby strcmp
爱好类型,但他们没有首先在C中正确编码: - )
* a 如果您的字符串不能以空值终止,则 不安全。但话说回来,如果它们不是空终止的,那么它们在技术上并不是字符串。对于处理字符串,strncmp
是正确的工具。
答案 1 :(得分:1)
嗯,首先你不想给b分配“abc”。更改值时,它将导致C风格字符串的内存泄漏。
要比较你想要使用strcmp函数。它在图书馆里。