创建字符数组的方法之间的区别

Sha*_*ang 2 c arrays string initialization

我很好奇在C中创建字符数组的不同方法.假设我们想创建一个包含字符串的字符数组"John Smith".我们可以通过显式提供元素数来初始化数组,即

char entireName[11] = "John Smith"; 
Run Code Online (Sandbox Code Playgroud)

其中有四个空格用于字符J- o- h- n,一个用于空格,五个用于S- m- i- t- h,一个用于字符串终止符\0.

您也可以通过简单地键入来完成上述操作

char entireName[] = "John Smith"; 
Run Code Online (Sandbox Code Playgroud)

编译这两个字符数组的人会有很大差异吗?是否为这两个表达式分配了相同的内存量,并以相同的速度执行?

有什么区别?

Nat*_*tta 6

两者都相同,但第二个是可取的.

如果在定义和初始化期间遗漏了数组的大小,编译器将分配所需的适当大小.与有时固定大小的定义相比,这更不容易出错

  1. 我们可能忘记为null-terminator保留空间\0.
  2. 我们可能会提供一个比指定大小更大的初始化字符串.

事实仍然是,如果您启用了适当的警告,如果您执行上述操作,您将收到警告,但使用第二种方法时,不会出现这些情况,因此不必担心.


编辑:

FWIW,在第二种情况下,数组长度将根据提供的初始化字符串长度决定.众所周知,编译器时间字符串不能在运行时调整大小,因此这是第二种方法的唯一可能限制.如果在后面的部分中,您希望数组保存的内容大于提供的初始化字符串的大小,则第二种方法不合适.