首页 > 解决方案 > 这个函数返回什么?(有时相同的字符串,有时缺少一个字符)

问题描述

这段代码究竟做了什么?有时它返回相同的字符串,有时该字符串缺少一个字符。这是为什么 ?

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;
}

标签: cstringpointerschar

解决方案


这段代码究竟做了什么?

它...

  • 接受指向以空字符结尾的字符串的指针。
  • 为比输入字符串短 1 个字符的空终止字符串分配内存。
  • 将输入字符串复制到内存中,不包括空终止符。
  • 在最后一个字符上写入空终止符。
  • 返回指向包含复制的子字符串的已分配内存的指针。

PS 避免在 C++ 中使用 malloc。

PPS 避免在 C++ 中拥有裸指针。

PPPS 如果输入字符串为空,则程序的行为未定义。有意义,因为空字符串不包含严格较短的子字符串。

PPPPS* sizeof(char)是多余的,因为sizeof(char)它始终为 1。


推荐阅读