所以我参加了我大学的初级水平系统课程,我的教授提到数组大小无法更改,因为它们是在内存中设置的。
此外,C中的字符串只是字符数组。
所以我的问题是,当长度本身无法更改时,如何使用strcpy复制不同长度的字符串?
(目前凌晨2:30,并在1天内完成考试)
道歉这是一个初学者的问题,但非常感谢任何帮助!!谢谢:)
答案 0 :(得分:5)
简单的答案是,即使我们使用strcpy
复制字符串,事实也不会改变。声明后,数组的大小不会改变。实际上假设你有一个char数组
char arr[]="helloworld"; //size of the array will be 11
strcpy(arr,"funny");
阵列的大小是多少?它与声明时相同。 11
。它没有改变原来的。
字符串的长度是多少?现在是5
。
String是以null结尾的char数组。这意味着数组可能有100
个元素,但字符串将是一些空终止的字符,它可以是任何例如2
长度或5
长度或任何可能的东西,因为我们有留下用于存储\0
的空间。
复制字符串并不意味着数组大小会发生变化。
还要注意一件事 - 字符串不仅仅是字符数组,它是这些字符末尾的NUL终结符,使其成为字符串。
char s[4]="hell";
这是合法的C代码,这不是字符串。 \0
没有空间。您不能将它与标准字符串库函数一起使用。问题是这不适用于strcpy
,strlen
等函数。因为这些实现依赖于NUL终止的字符数组才能正常工作。
请注意显示的最后一个示例 - 写这是Undefined behavior。
char s[4]="hell";
size_t len = strlen(s);
不,你不能那样做。 strlen
期待一些东西而你却没有给它一个。所以正确的说法是 - (这里有一个很好的描述性引用,我不记得来源)
在c中,字符串不是固有类型。 C字符串是具有一维字符数组的约定 由
'\0'
以空字符结尾。
1)不记得引用的来源:如果有人确实让我知道。我把它保存在一个文件中。(不是主要来源)