Читать внимательно readdir (3) .На практике последний член struct dirent
d_name
может вести себя как гибкий элемент массива , даже если он не может быть точно задокументирован как таковой.
Вероятно, StringArray
переполнение буфера (и вы не проверяете это достаточно внимательно).Вы забыли обнулить его (по крайней мере, memset(StringArray, 0, sizeof (StringArray));
...)
Конечно, вы неправильно понимаете malloc .Он может потерпеть неудачу, и вам всегда нужно использовать его результат.Подробнее о C динамическом распределении памяти .
Читать Как отлаживать небольшие программы .Скомпилируйте все предупреждения и отладочную информацию, например, с gcc -Wall -Wextra -g
, если используете GCC .
Потратьте несколько дней, читая больше о базовом программировании на Си.Прочитайте учебник C .Посмотрите на C ссылку сайт.В случае сомнений, проверьте стандарт C11 n1570 после прочтения хорошего учебника по программированию на C.Изучите исходный код небольших бесплатных программ программ для вдохновения.
После того, как вы улучшите свои базовые навыки программирования на C, прочитайте кое-что о программировании на Linux, например, ALP .
Уничтожьте вашу бессмысленную программу (она настолько глючит, что не стоит ее улучшать или пытаться ее утилизировать). Как только вы улучшили свой уровень программирования на C, снова начните писать свою программу с нуля. Используйте хорошую систему контроля версий (я рекомендую git ), и сделайте несколько очень итерационных и инкрементныхразработка (напишите одну или две дюжины строк, скомпилируйте их со всеми предупреждениями, улучшите их, чтобы не было предупреждений, проверьте их с помощью отладчика GDB , а затем передайте их в систему управления версиями и повторите все).Внимательно прочитайте документацию по каждой используемой функции (например, man
страниц, таких как read (2) , syscalls (2) , errno (3) , printf (3) и т. Д.)
Примечание.Вам, вероятно, следует потратить хотя бы целую неделю на чтение, прежде чем касаться клавиатурыЯ действительно рекомендую прочитать SICP (отличное введение в программирование, которое не использует C, но учит очень важным и актуальным понятиям)