![]() |
1
7
字符串是字符数组。这里有一个指向字符的指针数组。 |
![]() |
2
6
线:
为char分配一个25元素的指针数组。指向char的指针通常被视为字符串,因此此声明可以解释为字符串数组,但用于存储这些字符串的内存尚不存在。您必须单独分配这些字符串。 假设指针在您的机器上是4个字节,这一行将具有分配25 x 4=100个字节的效果。 在C语言中,当使用没有下标的数组名时,它会“分解”为指向数组第一个元素的指针。 所以…执行此行时:
播放器名称指向100字节的内存,足够容纳100个读取字符的空间(99个字符加上一个终止的nul字节)。编译器不保护您将这些字符存储在为25个指针分配的内存中。 最后:
正在将数组的起始地址传递给函数initfoo()。编译器知道这可能是错误的,因为initfoo()应该采用指向chars的指针,而不是指向char指针数组的指针,但它允许您执行除警告之外的任何操作。initfoo()中的printf()语句将该指针重新解释为char指针,您将得到正确的结果! 如其他人所说,将一行改为
它声明一个25个字符的数组。 |
![]() |
3
4
|
![]() |
4
0
要修复它,请更改为:
|
![]() |
Fishie · 作为类成员的智能指针是否仍然自动释放?[关闭] 3 月前 |
![]() |
Anka Hanım · 关于结构和动态数组地址的问题 3 月前 |
![]() |
tTt · 使用堆栈中的值重新分配指针 4 月前 |
![]() |
manuel · 现代C中空指针的替代方案++ 5 月前 |