2015-02-24 2 views
-2

У меня есть этот путь: ./demodir/a1/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1дополнительные байты в распределении таНоса

Когда я выделить пространство для имени пути в строке, используя только один (1) дополнительные байты (для «\ 0 ') строка печатается по-разному.

path = (char *) malloc(strlen(dirname) + strlen(direntp->d_name) + 1);  

Печать: ./demodir/a1!/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1

.... это вопрос

Мне нужно все "+2" байт для распределения памяти, кроме того, длина содержимого. Почему?

+1

Во-первых, код, который вы отправили, не «печатает» что-либо, поэтому как можно «распечатать» то, что вы опубликовали, не ясно. Во-вторых, я не вижу никакого кода, который бы инициализировал выделенную память. Где это? – AnT

+0

Откуда появляется 'dirname'? Вход в консоль? Этот странный символ '' '' предполагает более чем длину строки. Это значение EOF как персонажа? –

+0

Хмммм ... Какая кодировка - это ваш путь? Вы уверены, что там нет широкого UTF8? – oysteijo

ответ

3

Вам нужен дополнительный байт, чтобы включить косую черту '/', разделяющую имя dirname из базового имени.

char *path = (char *) malloc(strlen(dirname) + 1 + strlen(direntp->d_name) + 1); 
sprintf(path, "%s/%s", dirname, dirent->d_name) 
+0

Спасибо .. Я не знаю, как я это пропустил. – JeanAlesi

+0

Нет проблем. Мы все допустили эту ошибку (так я узнал пропущение) – user590028