gpt4 book ai didi

在 C 中复制字符串

转载 作者:行者123 更新时间:2023-12-04 12:08:48 25 4
gpt4 key购买 nike

我正在学习 c 中的字符串。我正在使用 code::blocks 作为编译器,尽管它不仅仅适用于 c。因此,下面代码的问题在于 string2 的输出是存储的 5 个字符加上 string1 的输出。我会告诉你:

#include <stdio.h>
#include <string.h> /* make strncpy() available */

int main()
{
char string1[]= "To be or not to be?";
char string2[6];

/* copy first 5 characters in string1 to string2 */
strncpy (string2, string1, 5);

printf("1st string: %s\n", string1);
printf("2nd string: %s\n", string2);
return 0;
}

输出是:

1st string contains: To be or not to be? 
2nd string contains: To be To be or not to be?

如果你问我,那可不止 5 个字符......

最佳答案

来自 strncpy 手册页:

No null-character is implicitly appended to the end of destination, so destination will only be null-terminated if the length of the C string in source is less than num.

由于原始字符串的长度大于 5,因此没有添加 NULL。

正如其他人所指出的,为了增加一些安全性:

strncpy (string2, string1, sizeof(string2));
string2[sizeof(string2)-1] = '\0';

注意如果string2是通过malloc()获取的:

char * string2 = malloc(123); //sizeof(string2) == sizeof(void *) and not 123

上面的代码会失败。

为了完整起见,这里是代码:http://ideone.com/eP4vd

关于在 C 中复制字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7012513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com