Если у вас есть список ls
записей для каждого файла в каталоге, где content
- указатель на выделенный t_entry
, содержащий имя файла и stat
информацию, например,
typedef struct s_list {
void *content;
size_t content_size;
struct s_list *next;
} t_list;
и
typedef struct s_entry {
char *filename;
struct stat filestat;
} t_entry;
Функция freelist (t_list *head)
должна будет выполнять итерацию по каждому узлу, а также:
free
filename
, выделенных в каждом t_entry
; free
выделенный t_entry
; и наконец free
сам узел t_list
. Вы можете сделать что-то похожее на следующее:
void freelist (t_list *head)
{
t_list *node = head; /* temporary node to iterate list */
/* (you could use head, but don't) */
while (*node) {
t_list *victim = node; /* pointer to current node to free */
t_entry *entry = node->content; /* pointer to content */
free (entry->filename) /* free content->filename */
free (entry); /* free t_entry struct itself */
node = node->next; /* advance before freeing victim */
free (victim); /* free current t_list node (victim) */
}
}
Обратите внимание, что вместо использования node
, вы можете просто использовать head
для итерации, поскольку freelist
получает копию это не изменило бы адрес списка в любом случае - и так как список не останется, когда вы закончите, но гораздо лучше использовать временный узел для итерации списка (в любой функции), чтобы вы не путали обстоятельства, когда вы обрабатываете фактический адрес списка (например, параметр был t_list **
) или копию указателя (параметр был t_list *
).
Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.
var value= document.getElementById("theTextBoxInQuestion").value;
var number= parseFloat(value).toFixed(2);
Это кажется, что Вы просто хотите удалить начальные нули, если нет только один оставленный ("0" для целого числа или "0.xxx" для плавания, где x может быть чем-либо).
Это должно быть хорошо для первого сокращения:
while (s.charAt(0) == '0') { # Assume we remove all leading zeros
if (s.length == 1) { break }; # But not final one.
if (s.charAt(1) == '.') { break }; # Nor one followed by '.'
s = s.substr(1, s.length-1)
}
Попробуйте это:
<input type="text" onblur="this.value=this.value.replace(/^0+(?=\d\.)/, '')">
Ниже представлено более упрощенное решение. Проверьте это!
var resultString = document.getElementById("theTextBoxInQuestion")
.value
.replace(/^[0]+/g,"");