【发布时间】:2010-12-16 03:15:23
【问题描述】:
注意:这个问题受到this answer的影响。
以下是有效的 C 代码:
char myString[] = "This is my string";
这将在堆栈上分配一个长度为 18 的字符串(包括\0 字符)并为其分配指定的值。
但是,以下内容:
char myStrings[][] = {"My 1st string", "My 2nd string", "My 3rd string"};
无效,给出错误“数组类型的元素类型不完整”。
所以我必须像这样指定数组:
char myStrings[][20] = {"My 1st string", "My 2nd string", "My 3rd string"};
其中 20 是一个比我最长的字符串大的数字。
这会按预期编译和工作。
如果编译器在堆栈上分配单个字符串时可以动态感知字符串长度,为什么它不能对字符串数组这样做呢?
编辑:
澄清一下,这不是我遇到的现实生活中的编程问题 - 这只是病态的好奇心。
【问题讨论】:
标签: c string stack memory-management