将1个单个字符复制到字符串中

时间:2019-03-19 22:42:29

标签: c pointers

我正在尝试使用自定义的Abstract数据类型创建ASCII表

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 个答案:

答案 0 :(得分:2)

三个问题:

1)您必须为目标字符串的空终止符分配一个额外的字节:

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

2)您必须将指向源的指针传递给strcpy(这可能会导致您的段错误):

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

3)源字符串必须以null终止,这不在您的代码中。直接修复不容易。但是无论如何您都不需要strcpy(),只需直接设置两个字节:

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

然后它将按预期工作。