为什么 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。您不能将它与标准字符串库函数一起使用。问题是这不适用于 strcpy
、strlen
等函数。因为这些实现取决于要以 NUL 终止的字符数组才能正常工作。
注意最后一个例子 - 写这个是 Undefined behavior。
char s[4]="hell";
size_t len = strlen(s);
不,你不能那样做。 strlen
期待一些东西,但你没有给它。所以正确的表达方式应该是——(这是一个很好的描述性引用,我不记得出处了)
In c, 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) 不记得引用的来源:如果有人知道请告诉我。我把它保存在一个文件中。(不是主要来源)
所以我在我的大学注册了一个初级系统课程,我的教授提到数组大小不能更改,因为它们是在内存中设置的。
此外,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。您不能将它与标准字符串库函数一起使用。问题是这不适用于 strcpy
、strlen
等函数。因为这些实现取决于要以 NUL 终止的字符数组才能正常工作。
注意最后一个例子 - 写这个是 Undefined behavior。
char s[4]="hell";
size_t len = strlen(s);
不,你不能那样做。 strlen
期待一些东西,但你没有给它。所以正确的表达方式应该是——(这是一个很好的描述性引用,我不记得出处了)
In c, 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) 不记得引用的来源:如果有人知道请告诉我。我把它保存在一个文件中。(不是主要来源)