2
static char a[255] = "\0";
and
const char *b = " ";

现在,当我将“abc”分配给 a 和 b 时,对于 a 剩余的 252 个字节保持 '\0' 而对于 b 则不是这样。因此,当我尝试比较它们时,它们会变得不同。一种解决方案是只比较直到 sizeof(b),就像我们在 strncmp() 中所做的那样。还有其他方法吗?可能是通过将一个转换为另一个?

提前致谢。

4

2 回答 2

6

那是因为没有b“剩余 252 字节”。被创建为指向内存的指针,其中包含两个字符,仅此而已。b<space><nul>

当您分配给 时b,您实际上将指针更改为指向四个字符a、和b,但是在那之后仍然没有任何东西可以安全地使用。c<nul>

strcmp是在 C 中比较字符串的公认方法,尽管那些喜欢 namby- strncmppamby 的类型告诉你它是不安全的*a,但它们首先在 C 中没有正确的编码:-)


*a如果您的字符串不是以空值结尾的,则这是不安全的。但话又说回来,如果它们不是以空值结尾的,它们在技术上不是字符串。对于处理字符串,strcmp是适合这项工作的工具。

于 2010-10-29T05:54:32.167 回答
1

好吧,首先您不想将“abc”分配给b。当您更改值时,它将导致 C 样式字符串的内存泄漏。

要进行比较,您要使用 strcmp 函数。它在图书馆里。

于 2010-10-29T05:52:26.150 回答