我正在尝试使用自定义的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);
}
}
我不明白我如何错误地访问内存,有人可以帮忙吗?
答案 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;
然后它将按预期工作。