Leo*_*Hat 4 c string stack memory-management
注意:这个问题受到这个答案的影响.
以下是有效的C代码:
char myString[] = "This is my string";
Run Code Online (Sandbox Code Playgroud)
这将\0在堆栈上分配长度为18(包括字符)的字符串,并为其指定值.
但是,以下内容:
char myStrings[][] = {"My 1st string", "My 2nd string", "My 3rd string"};
Run Code Online (Sandbox Code Playgroud)
无效,给出错误"数组类型具有不完整的元素类型".
所以我必须像这样指定数组:
char myStrings[][20] = {"My 1st string", "My 2nd string", "My 3rd string"};
Run Code Online (Sandbox Code Playgroud)
其中20是一个大于我最长字符串的数字.
这编译并按预期工作.
如果编译器在堆栈上分配单个字符串时可以动态地感知字符串长度,为什么不能对字符串数组这样做呢?
编辑:
只是为了澄清,这不是我遇到的现实生活中的编程问题 - 这只是病态的好奇心.