1

我有2个问题..

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

    strcpy();

    strncpy();

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

例如..

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

请解释。

编辑: 在上面的代码中,我倒置了参数。这只是我在这里问问题时犯的错字。正确的方法应该是

strcpy(str, texttocopy); // :)
4

2 回答 2

3

strcpy函数总是添加终止符,但strncpy在某些情况下可能不会这样做。

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

于 2014-03-12T07:43:34.207 回答
1
  1. 'strcpy' 函数将数据从源地址复制到目标地址,包括 '\0' 终止字符。'strncpy'函数复制数据的方式相同,但如果要复制的前n个字节中没有终止字符'\0',则不会复制终止字符,您需要自己添加它来终止细绳。

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

于 2014-03-12T08:02:54.733 回答