繁体   English   中英

二维字符串数组的C内存布局

[英]C memory layout for two dimensional string arrays

我试图弄清楚c中二维数组的内存布局是如何工作的。 特别是字符串数组。 阅读此网站后,我知道它应该如何工作

但是当进行分配时

char *states[] = {
    "California", "Oregon",
    "Washington", "Texas"
};

行大小是否自动设置为与最长字符串的大小匹配?

我试图使用下面的代码来弄清楚它,但我仍然不明白。

int main(){
  char *test[] = {
    "0", "12",
    "345", "6789"
  };
  int i = 0;
  int j = 0;
  for (i=0; i<10; i++){
   for (j=0; j<10; j++){
     printf("%d,%d: ", i,j);
     printf("%c\n", test[i][j]);
   }
 }
 return 0;
}

我觉得所有行的大小都应该相同,但是遍历数组时,下一个字符串似乎在单个空格之后立即开始。

提前致谢!

您实际上没有二维char数组。 相反,您有一个一维的char指针数组。 在二维char数组中,所有字符串都将为其分配完全相同的内存量。 您的案件实际上在许多方面都比较简单。 编译器会创建一堆常量字符串,并使用这些指针初始化char *数组。 每个字符串都有其自己的独立长度。

声明真正的二维char数组的方法如下:

char states[][11] = {
    "California",
    "Oregon",
    "Washington",
    "Texas"
};

此处的字符串长度是明确的(最多10个字符,空字节加1)。 不管是否使用全部字符串,每个字符串都具有完整的字符数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM