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