我有2个问题..
-
使用
char *string
执行以下命令时,是否有必要添加终止字符?strcpy();
strncpy();
-
是否有必要在对上述操作进行任何操作之前先分配内存以针对
char *string
?
例如..
char *str;
str = malloc(strlen(texttocopy));
strcpy(texttocopy, str); // see the below edit
请解释。
编辑:在上面的代码中,我倒了参数。这只是我在这里提出问题时做的错字。正确的方法应该是
strcpy(str, texttocopy); // :)
strcpy
函数始终添加终结器,但在某些情况下strncpy
可能不会这样做。
对于第二个问题,是的,您需要确保为目的地分配足够的内存。在您的示例中,您的未分配足够的内存,并且将具有缓冲区溢出。请记住,strlen
返回字符串的长度,而无需计算终结器。您还将参数倒向 strcpy
,目的地是 first 参数。
-
'strcpy'函数将数据从源地址(包括' 0'终止字符)复制。'strncpy'函数以相同的方式将数据复制为相同的方式,但是如果没有终止字符 0'在要复制的第一个n字节中,则不会复制终止字符,您将需要自己添加它以终止字符串。
-
您将始终必须在静态或动态上分配记忆空间以进行播放。因此,您应该先声明一个字符数组或动态分配大量内存,然后您可以使用字符串
来播放不错