【发布时间】:2022-01-21 02:38:53
【问题描述】:
(免责声明:这不是一个完整的练习,因为我必须完成它,但是这部分代码发生了错误)
我做了这个练习来练习内存分配。
创建一个函数,它接受一个 url(一个 C 字符串)并返回网站的名称(带有“www.”和扩展名)。 例如,给定维基百科的链接“http://www.wikipedia.org/”,它必须只返回另一个字符串中的“www.wikipedia.org”(在堆中动态分配)。
这是我到目前为止所做的: 做一个for循环,当“i”大于6时,开始复制另一个字符串中的每个字符,直到到达“/”。 我需要分配另一个字符串,然后重新分配它。
这是我目前的尝试:
char *read_website(const char *url) {
char *str = malloc(sizeof(char));
if (str == NULL) {
exit(1);
}
for (unsigned int i = 0; url[i] != "/" && i > 6; ++i) {
if (i <= 6) {
continue;
}
char* s = realloc(str, sizeof(char) + 1);
if (s == NULL) {
exit(1);
}
*str = *s;
}
return str;
}
int main(void) {
char s[] = "http://www.wikipedia.org/";
char *str = read_website(s);
return 0;
}
(1) 通过逐行调试,我注意到一旦到达 for 循环,程序就会结束。 (已解决)我意识到最好删除 if (i
(2) 另一件事:当我使用realloc 时,我选择创建另一个指针,因为我必须检查是否存在内存泄漏。这是一个好习惯吗?还是我应该做点别的?
编辑:删除 if-check 后,我看到这个 realloc(在调试期间触发了断点)。
【问题讨论】:
-
那是因为你的 for 循环没有做任何事情。返回并确保您了解
continue的作用。
标签: c string memory-management dynamic-memory-allocation