У меня есть структура, объявленная как extern conf_t conf
.ключевое слово extern и строковые переменные
typedef struct {
int home_dir_len;
char *home_dir;
int key_file_len;
char *key_file;
unsigned int max_mem;
unsigned int runtime;
} conf_t;
Я пытаюсь установить его переменные с помощью функции ниже, но только целые значения Создаются, а не строки.
if (strcmp(tok1, "HOME_DIR") == 0) {
char *dir = strtok(NULL, &delim);
conf.home_dir_len = strlen(dir);
conf.home_dir = dir;
}
else if (strcmp(tok1, "KEY_FILE") ==0) {
char *key = strtok(NULL, &delim);
conf.key_file_len = strlen(key);
conf.key_file = calloc(conf.key_file_len +1, sizeof(char));
conf.key_file = key;
}
else if (strcmp(tok1, "MAX_MEM") ==0) {
conf.max_mem = atoi(strtok(NULL, &delim));
}
else if (strcmp(tok1, "RUNTIME") ==0) {
conf.runtime = atoi(strtok(NULL, &delim));
}
else {
perror("you shouldnt be here");
}
Это выход:
conf.home_dir_len = 5 conf.home_dir = ' and more empty lines ' **This should be /tmp/** conf.key_file_len = 10 conf.key_file = 'nd more empty lines ' **this should be myfile.key** conf.max_mem = 10 conf.runtime = 10
Можете ли вы объяснить, почему и как я могу это исправить?
Здесь вы действительно не показали достаточно контекста. Каково определение структуры? Как минимум, вы просачиваете результат вызова 'calloc'. И 'sizeof (char)' is '1'. –
как я могу отредактировать свой код, чтобы этого не делать, я добавил calloc для второй части, чтобы узнать, не изменилось ли это, но это не так, поскольку оба они все еще ошибочны. – cxzp