【发布时间】:2021-07-19 16:34:51
【问题描述】:
最近又开始做一些 c 编程,目前遇到了作业问题。下面的函数应该通过为其分配内存来初始化一个字符串,这也是我需要使用 Assert() 的第一个赋值。
我必须编写dstring_initialize soo 的函数,以便以下工作:
DString str1, str2;
str1 = dstring_initialize("");
dstring_delete(&str1);
assert(str1 == NULL);
这可能是我搞砸了一些基本的东西,这就是函数目前的样子:
DString dstring_initialize(const char* str)
{
assert(str != NULL);
char* str1;
str1 = (char*)malloc(sizeof(char));
strcpy(str1, str);
assert(str1 == str);
return str1;
}
我收到的错误消息是最后一个 Assert Assert(str1 == str) 失败,我一直在尝试不同的事情,但无法弄清楚我做错了什么。
【问题讨论】:
-
欢迎来到 SO。请提供一个MCVE 来说明您的问题。您的 sn-p 无法编译。
DString是什么? -
assert(str1 == str);可能不是您想要做的。要比较两个字符串是否相等,您必须使用strcmp。该断言检查str1和str持有的地址是否相同,这永远不会是真的。 -
您至少应该关心输入字符串的长度。如果您只为 1 个字符分配内存,则除了
""之外,您永远无法存储任何内容。 -
另外,您的返回类型是
DString,但您返回的是char *。除非DString是typedef的char *,否则肯定会导致一些问题。
标签: c function pointers assert strcpy