【发布时间】:2019-09-10 09:46:46
【问题描述】:
在我的这部分代码中,我删除了string1 的空格并将结果复制到string2。
char * remove_blank_spaces(char * string1) {
char * string2 = malloc(sizeof(string1));
int index = 0;
for (int i = 0; string1[i] != 0; i++) {
if(string1[i] != ' ') {
//printf("i: %d\n", i);
//printf("c2: %c\n", string1[i]);
string2[index] = string1[i];
index++;
}
}
string2[index] = '\0';
printf("string2: %s\n", string2);
return string2;
}
我检查结果:
assert(remove_blank_spaces("a b") == "ab"); // Edit: here is the error!
我收到一个错误:Assertion failed! 和 Expression: remove_blank_spaces("a b") == "ab"
我比较了 Virtual-C 中的字符串,它们看起来是一样的。 为什么断言失败?
【问题讨论】:
-
使用
strcmp比较字符串,而不是==。 -
sizeofof a pointer 是指针本身的大小,而不是它所指向的大小。要获取字符串的长度(不包括非常重要的空终止符),请使用strlen。 -
至于您的断言,这是因为您比较了两个永远不会相等的指针。如前所述,您使用
strcmp解决了这个问题。也许您应该考虑更新您的基本 C 知识? -
不,因为
string1仍然是一个指针,而sizeof string1会给你指针本身的大小。您需要使用strlen(string1) + 1(+1表示终止符)。另请注意,sizeof(char)由 C 规范定义为始终等于1。 -
最后,您的代码如图所示存在内存泄漏。由于您不存储由
remove_blank_spaces返回的指针,因此您不可能free函数分配的内存。
标签: c string comparison assert c-strings