如何将文本健壮地复制到char *而没有任何错误

时间:2014-03-12 07:41:45

标签: c string malloc strcpy strncpy

我有两个问题..

  1. 在针对char *string执行以下命令时是否需要添加终止字符?

    strcpy();

    strncpy();

  2. 是否有必要在执行上述任何操作之前分配内存以对char *string起作用?

  3. 例如..

    char *str;
    str = malloc(strlen(texttocopy));
    strcpy(texttocopy, str); // see the below edit
    

    请解释。

    编辑: 在上面的代码我颠倒了论点。在这里提出这个问题时,我只是写错了。正确的方法应该是

    strcpy(str, texttocopy); // :)
    

2 个答案:

答案 0 :(得分:3)

strcpy函数始终会添加终止符,但在某些情况下strncpy可能无法执行此操作。

对于第二个问题,是的,你需要确保为目的地分配了足够的内存。在您的示例中,分配了足够的内存,并且会有缓冲区溢出。请记住,strlen返回字符串的长度,而不用计算终止符。您还将参数反转为strcpy,目标是第一个参数。

答案 1 :(得分:1)

  1. 'strcpy'函数将数据从源地址复制到目标地址,包括'\ 0'终止字符。 'strncpy'函数以相同的方式复制数据,但如果没有终止字符'\ 0'存在于要复制的前n个字节中,则终止字符将不会被复制,您需要自己添加它以终止字符串。

  2. 您将始终静态或动态分配要使用的内存空间。因此,您应该先声明一个字符数组或动态分配一块内存,然后才能使用您的字符串。