【发布时间】:2020-07-22 16:38:47
【问题描述】:
这段代码究竟做了什么? 有时它返回相同的字符串,有时该字符串缺少一个字符。这是为什么呢?
char *string_dup(const char *s) {
size_t n = strlen(s);
char *t = malloc(n * sizeof(char));
if (t == NULL) return t;
for (unsigned int i = 0; i < n; ++i)
t[i] = s[i];
t[n - 1] = '\0';
return t;
}
【问题讨论】:
-
创建缺失字符和非缺失字符的minimal reproducible example。
-
具体哪一部分你不明白?你知道
strlen做什么吗?malloc做什么?t[n - 1] = '\0'有意义吗?您是否尝试使用一些示例值跟踪逻辑? -
不,我明白这一切,但我尝试用“hello”作为示例执行它,它第一次显示“hell”,然后显示“hello”,这是为什么?
-
好吧,一方面它不会返回与源字符串完全相同的副本。使用调试器单步调试代码,同时监控变量及其值,看看它实际做了什么。
-
这是 C,不是 C++