в 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;
Могу ли я как-то из Си кода, в функции kmain(), получить адрес метки, например stack_here или stack_space?
extern char stack_here[];
void kmain()
{
printk("%p\n", stack_here);
}
Что будет если в теории какая нибудь функция или что-то другое переполнит стек? Она повредит код или другие данные?
Какой размер стека будет оптимальным?
Я профан, иду шаг за шагом , изучаю то что ни в универе ни в школе я не знал и лишь прошу помощи раобраться в чем то
К одному -- меньшему элементу.