c - 这是使用 strcpy 的好方法吗?

标签 c strcpy

<分区>

我尝试使用strcpy;这是这样做的好方法吗?

char *stringvar;
stringvar = malloc(strlen("mi string") + 1);
strcpy(stringvar, "mi string");
stringvar[strlen("mi string")] = '\0';

你怎么看?

最佳答案

其中只有一个错误:您没有检查 malloc-failure。

除此之外,它是重复的并且容易出错。
而且用终结符覆盖终结符也没用。
此外,重复重新计算字符串长度是昂贵的。
无论如何,因为您已经必须确定长度,所以更喜欢 memcpy()strcpy() .

你应该做的是将它提取到一个函数中,我们称它为strdup()。 (这是 POSIX 和下一个 C 标准给它的名称):

char* strdup(const char* s) {
    size_t n = strlen(s) + 1;
    char* r = malloc(n);
    if (r)
        memcpy(r, s, n);
    return r;
}

char* stringvar = strdup("mi string");
if (!stringvar)
    handle_error();

关于c - 这是使用 strcpy 的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57347298/

相关文章:

C 在不同的头文件中定义具有相同名称的宏?

c++ - 检查输出顺序是否正确

c - 在 C 中 move 实现

c - 使用c语言连接oracle数据库

复制结构体数组元素中的字符串

C: 使用 strcpy 将一个 struct 元素传输到数组

c++ - strcpy 和 strcmp,我做错了什么?

c - Objective C/C 中的命名约定,以 "_"开头?

C编程问题无关变量在使用STRCPY后被覆盖

c - 我无法理解以下 while 循环的条件