c - 这个函数返回什么?(有时相同的字符串,有时缺少一个字符)
问题描述
这段代码究竟做了什么?有时它返回相同的字符串,有时该字符串缺少一个字符。这是为什么 ?
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;
}
解决方案
这段代码究竟做了什么?
它...
- 接受指向以空字符结尾的字符串的指针。
- 为比输入字符串短 1 个字符的空终止字符串分配内存。
- 将输入字符串复制到内存中,不包括空终止符。
- 在最后一个字符上写入空终止符。
- 返回指向包含复制的子字符串的已分配内存的指针。
PS 避免在 C++ 中使用 malloc。
PPS 避免在 C++ 中拥有裸指针。
PPPS 如果输入字符串为空,则程序的行为未定义。有意义,因为空字符串不包含严格较短的子字符串。
PPPPS* sizeof(char)
是多余的,因为sizeof(char)
它始终为 1。
推荐阅读
- javascript - 如何以更好的方式编写它,例如 lodash
- jmeter - Jmeter 最大值随时间递减
- hash - 局部敏感散列可以应用于动态维数据点吗?
- amazon-cloudformation - Serverless 语法和 CloudFormation 语法之间似乎有冲突
- sql - Discord.js 数据库
- php - Doctrine 使用策略 NONE 设置条目 ID
- azure-devops - Azure Pipelines - Visual Studio 测试不发布来自 TestContext.WriteLine 的结果
- android - 从电子邮件意图中检索电子邮件“收件人”字段
- r - 闪亮模块:从模块中的单个函数返回多个反应输出(链接传单地图和数据表)
- powershell - 无法从 Azure DevOps Release 获取自定义变量值