gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:03:11 29 4
gpt4 key购买 nike

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

但是当进行分配时

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)。每个字符串都被赋予完整的字符数,无论是否全部使用。

关于二维字符串数组的 C 内存布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36252452/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com