Как рассчитать размер массива типа str? - PullRequest
0 голосов
/ 07 января 2019

В настоящее время я создаю функцию, которая должна добавлять новые элементы str к уже существующему массиву, размер которого я не знаю, поскольку каждый str не имеет одинаковый размер.

Я пытался использовать функцию sizeof (), но так как я не знаю размер каждой строки, я не вижу, как она работает. Я также пытался использовать технику, которую нашел:

char* liste[]={"one","two","three","four","five"};
int size = *(&liste + 1) - liste; 
printf(size);

Вместо размера я получаю «Программа получила сигнал SIGSEGV»

1 Ответ

0 голосов
/ 07 января 2019

Помните, что строковые литералы в двойных кавычках в C - и все массивы в этом отношении - обычно действуют как указатели (в частности, для строковых литералов они действуют как char* s). В этом случае вы создали массив указателей на массивы char s; Размер самого внешнего массива равен размеру указателя, умноженному на количество элементов. (Все строки хранятся где-то еще.)

Если вы хотите получить количество элементов, , и это известно во время компиляции , вы можете использовать sizeof(liste)/sizeof(liste[0]). Если он не известен во время компиляции, вам придется добавить другой способ его отслеживания, такой как NULL в конце или отдельную переменную, содержащую размер. (Строки в двойных кавычках используют эту первую опцию: "hello" примерно эквивалентно ['h', 'e', 'l', 'l', 'o', 0].)

Что касается SIGSEGV, то: printf принимает строку, то есть указатель, в качестве первого аргумента. Когда вы даете ему номер, он пытается использовать его в качестве указателя, запускает головой в какую-то память, к которой он не должен обращаться, и операционная система убивает его с помощью SIGSEGV. Правильный способ напечатать число - это что-то вроде printf("%d", my_int).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...