Вы не можете использовать sizeof
таким образом для массивов, переданных в качестве параметров функциям.
Причина в том, что при передаче массива в функцию в C, массив превращается в указатель на свой первый элемент. В результате, когда вы берете sizeof(a)
, вы получаете размер указателя, а не размер массива. В этом случае это то же самое, что и sizeof(char *)
, что на 32-разрядной машине будет 4, как вы заметили.
Вы также используете strncat
так, как это не было задумано. Смысл третьего параметра - предотвратить переполнение буфера, если strlen(a)
длиннее, чем объем пространства в буфере, в который вы копируете, в данном случае dir
. Я думаю, что вы хотите:
strncat(dir, a, 595); /** 600 - "dir " - \0 = 595 */
Поскольку в dir
есть место для еще 595 символов.
Также обратите внимание, что вы не можете сравнивать строки C, используя !=
. Ваше заявление if
должно использовать strcmp
вместо.