假设我真的想复制这个字符串。

char str[] = "";
char *str2 = "abc";
strcpy(str, str2);
printf("%s", str);  // "abc"
printf("%d", strlen(str));  // 3

那么,为什么它没有给我未定义的行为或导致程序失败。这样做有什么坏处?

最佳答案

这段代码肯定会导致堆栈问题,但是对于这么小的字符串,您没有看到这个问题。举个例子,如下所示:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        char str[] = "";
        char *str2 = "A really, really, really, really, really, really loooooooooooooooonnnnnnnnnnnnnnnnng string.";
        strcpy(str, str2);
        printf("%s\n", str);
        printf("%d\n", strlen(str));
        return 0;
}

一个人为的例子,是的,但是运行它的结果是:
A really, really, really, really, really, really loooooooooooooooonnnnnnnnnnnnnnnnng string.
92
Segmentation fault

这是不鼓励使用strcpy函数的原因之一,建议使用需要指定所涉及字符串大小的copy和concatenate函数。

关于c - 我可以将字符串复制为空字符串吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17599366/

10-15 00:33