Я пишу какую-то программу и в какой-то момент своего кода просматриваю каталог. Чтобы сделать строку, соответствующую пути и имени файла, у меня есть этот код:
char *aux;
aux = (char *) malloc(strlen(directory) + strlen(files[j] + 1));
sprintf(aux, "%s/%s", directory, files[j]);
//Debugging...
char b[100]; sprintf(b, "Path + file: %s\n", aux); write(1, b, strlen(b));
char c[100]; sprintf(c, "File: %s\n", files[j]); write(1, c, strlen(c));
Когда я выполняю свою программу, я получаю вывод:
Path + file: ./Path/file.txt!
File: file.txt
Как видите, в первой строке вывода файл имеет лишний символ (!
), который не принадлежит ни пути, ни файлу (как вы можете видеть во второй строке вывода). Я также пытался настроить размер malloc на разные значения, и это все еще происходит. Почему?
'/'
. Итак, насколько большим был этот маллок? Ваша программа вызывает неопределенное поведение. - person WhozCraig   schedule 03.01.2021/
. Вы хотите:aux = malloc(strlen(directory) + strlen(files[j]) + 1 + 1);
- person Craig Estey   schedule 03.01.2021asprintf
, она автоматически выделяет вам правильную сумму. Для систем без GNU libc посмотрите здесь, чтобы узнать, как реализовать это самостоятельно. - person koder   schedule 04.01.2021