Мне нужно каким-то образом получать fs::directory_entry с конца в начало.
в key записывается вся переменная вида "имя=значение", а не просто сам ключ
p = strchr(env[i], '=');
должно быть p = strchr(res[i].key, '=');
. Поправил код. Это возможно сделать или нужно будет для каждого случая делать отдельную проверку?
struct env {
char *key;
char *value;
};
struct env *split(char **env)
{
struct env *res = NULL;
int i;
for (i = 0; env[i]; ++i) {
char *p;
res = realloc(res, (i + 1) * sizeof(*res));
res[i].key = strdup(env[i]);
p = strchr(res[i].key, '=');
*p = 0;
res[i].value = p + 1;
}
res = realloc(res, (i + 1) * sizeof(*res));
res[i].key = NULL;
res[i].value = NULL;
return res;
}
mov ecx, field[1]
...
field times 9 db 'X'
movzx ecx, byte [field + 1]
mov ecx, [field + 4]
Но я ведь пишу под 64 bit
Вы уверены? Этот код работает так, как я ожидаю.
#include <stdio.h> #define foo 1 #define bar foo void main(void) { printf("%d\n", bar); }
Из вашего утверждения следует, что на данном примере возникнет ошибка на этапе компиляции. Но этого не происходит. Код работает исправно - выводится единица.
printf("%d\n", bar)
разворачивается в printf("%d\n", foo)
(подставился bar), который дальше разворачивается в printf("%d\n", 1)
(подставился foo). оказалось весьма неожиданно, что макрос отменяется на протяжении всего файла, а не только после директивы undef.
#define A B
int A = 1;
#undef A
int A = 2;
Смотря какой стандартной библиотеки. В glibc printf находится в stdio-common/printf.c, и, как видишь, это обёртка вокруг __vfprintf_internal из stdio-common/vfprintf-internal.c.