如何可靠地将文本复制到char*而不出现任何错误
我有两个问题如何可靠地将文本复制到char*而不出现任何错误,c,string,malloc,strcpy,strncpy,C,String,Malloc,Strcpy,Strncpy,我有两个问题 对char*字符串执行以下命令时,是否需要添加终止字符 strcpy() strncpy() 在对char*字符串执行任何上述操作之前,是否需要分配内存 例如 char *str; str = malloc(strlen(texttocopy)); strcpy(texttocopy, str); // see the below edit 请解释一下 编辑: 在上面的代码中,我颠倒了参数。这只是我在这里提问时的打字错误。正确的方法应该是 strcpy(str, texttoco
char*字符串执行以下命令时,是否需要添加终止字符
strcpy()代码>
strncpy()代码>
char*字符串执行任何上述操作之前,是否需要分配内存
char *str;
str = malloc(strlen(texttocopy));
strcpy(texttocopy, str); // see the below edit
请解释一下
编辑:
在上面的代码中,我颠倒了参数。这只是我在这里提问时的打字错误。正确的方法应该是
strcpy(str, texttocopy); // :)
该函数始终添加终止符,但在某些情况下可能不添加终止符
对于第二个问题,是的,您需要确保为目标分配了足够的内存。在您的示例中,您没有分配足够的内存,因此会出现缓冲区溢出。请记住,返回字符串的长度而不计算终止符。您还将参数反转为strcpy,目标是第一个参数。函数始终添加终止符,但在某些情况下可能不添加终止符
对于第二个问题,是的,您需要确保为目标分配了足够的内存。在您的示例中,您没有分配足够的内存,因此会出现缓冲区溢出。请记住,返回字符串的长度而不计算终止符。您还将参数反转为strcpy,目标是第一个参数
我已经把
malloc(strlen(texttocopy))
。这将不会分配足够的内存?所以根据你的说法,我是否需要将其更改为malloc(strlen(texttocopy)+1)
?@BlueBird你需要strlen(texttocopy)+1
@BlueBird并更改strcpy
调用的参数。我已经将malloc(strlen(texttocopy))
。这将不会分配足够的内存?因此,根据您的说法,我是否需要将其更改为malloc(strlen(texttocopy)+1)
?@BlueBird您需要strlen(texttocopy)+1
@BlueBird并更改strcpy
调用的参数。注意。。我急于阅读下面每秒钟编辑的答案注意。。我急于阅读下面每秒钟编辑的答案假设您需要10个字节,例如:静态分配:char buf[10];动态分配:char*buf=(char*)malloc(10);假设您需要10个字节,例如:静态分配:char buf[10];动态分配:char*buf=(char*)malloc(10);