Копирование 1 одиночного символа в строку - PullRequest
1 голос
/ 20 марта 2019

Я пытаюсь создать таблицу ASCII, используя настроенный тип данных Abstract

typedef struct dictionary {
    int code;
    char* str;
}dictionary;

, и я сталкиваюсь с исключением при попытке выполнить следующий код

dictionary table[4096];
void preset() {
    for (int i = 0; i < 256; i++) {
        char temp = 0 + i;
        table[i].str = (char *) malloc(sizeof(char));
        strcpy(table[i].str,temp);
    }
}

Я неНе понимаю, как я неправильно обращаюсь к памяти, кто-то может помочь?

1 Ответ

2 голосов
/ 20 марта 2019

Три проблемы:

1) Вы должны выделить дополнительный байт для нулевого терминатора целевой строки:

table[i].str = malloc(2);

2) Вы должны передать указатель на источник в strcpy (это, вероятно, вызвало ваш segfault):

strcpy(table[i].str,&temp);

3) Исходная строка должна заканчиваться нулем, чего нет в вашем коде. Это не легко исправить напрямую. Но вам все равно не нужен strcpy (), просто установите два байта напрямую:

table[i].str[0] = i;
table[i].str[1] = 0;

Тогда все должно работать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...