为什么 strcpy 在数组大小不可变时工作,C

Why does strcpy work when array sizes are immutable, C

所以我在我的大学注册了一个初级系统课程,我的教授提到数组大小不能更改,因为它们是在内存中设置的。

此外,C 中的字符串只是字符数组。

所以我的问题是,当长度本身无法更改时,如何使用 strcpy 复制不同长度的字符串?

(目前 2:30am 还有 1 天就要考试了)

抱歉,这是一个初学者问题,但非常感谢任何帮助!!谢谢 :)

简单的答案是,即使我们使用 strcpy 复制字符串,事实也不会改变。一旦声明,数组的大小就不会改变。事实上假设你有一个 char 数组

char arr[]="helloworld"; //size of the array will be 11
strcpy(arr,"funny");

数组的大小是多少?和声明的时候一样。 11。它与原来的没有变化。

字符串的长度是多少?现在 5

字符串是空终止字符数组。这意味着数组可能有 100 元素,但字符串将是一些以 null 结尾的字符,它可以是任何东西,例如 2 长度或 5 长度或任何可能的东西,因为我们有space 剩余用于存储 [=19=]

复制字符串并不意味着数组大小发生变化。

还要非常小心地注意一件事 - 字符串不仅仅是字符数组,是那些字符末尾的 NUL 终止符使它成为一个字符串。

char s[4]="hell";

这是合法的 C 代码,不是字符串。 [=19=] 没有 space。您不能将它与标准字符串库函数一起使用。问题是这不适用于 strcpystrlen 等函数。因为这些实现取决于要以 NUL 终止的字符数组才能正常工作。

注意最后一个例子 - 写这个是 Undefined behavior

char s[4]="hell";
size_t len = strlen(s);

不,你不能那样做。 strlen 期待一些东西,但你没有给它。所以正确的表达方式应该是——(这是一个很好的描述性引用,我不记得出处了)

In , a string is not an intrinsic type. A C-string is the convention to have a one-dimensional array of characters which is terminated by a null-character, by a '[=24=]'.

1) 不记得引用的来源:如果有人知道请告诉我。我把它保存在一个文件中。(不是主要来源)