Помните, что строковые литералы в двойных кавычках в 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)
.