Примечание: На этот вопрос оказали влияние 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 это число, которое больше, чем моей самой длинной строки.
Это компилируется и работает должным образом.
Если компилятор может динамически воспринимать длину строки при распределении одной строки в стеке, почему бы не сделать это для массива строк?
Edit:
Просто чтобы прояснить, это не является реальной проблемой жизни программирования я испытываю - это просто болезненное любопытство.
+1 Хороший ответ - было больше похоже на то, о чем я думал. – LeopardSkinPillBoxHat