指针和结构阵列操纵


 #define MAX_KEYS 65
struct Key {
        int id;
        char cryptkeys[MAX_KEYS];
};

int main(int argc, char ** argv) {
int MAX_LINE = 69;
struct Key *table[3];
struct Key *(*p)[] = &table;
//allocating space for the pointers in array
for(int i = 0; i < 4; i++) {
        table[i] = malloc(sizeof(struct Key));
}
//parsing the id and the keys
char id[3];
char key[65];  
for(int i = 0; i < size-1; i++) {
        struct Key *k = (struct Key*)malloc(sizeof(struct Key));
        string = a[i];
        strncpy(id, string, 3);
        id[3] = '';
        k->id = atoi(id);
        for(int j = 4; j < strlen(string); j++) {
                key[j-4] = string[j];
        }
        strcpy(k->cryptkeys, key);
        table[i] = k; 
        printf("%s", table[i]->cryptkeys); //this will print
}
for(int i = 0; i < sizeof(table) -1; i++) {
        printf("%d", table[i]->id); //seg fault here, what is the difference from above?
        printf(" ");
        printf("%s", table[i]->cryptkeys);
}
return 0;
}

大家好,我有一个有关操纵指针的问题。我宣布了一系列指示器,这些指针将充满我创建的结构。每个结构都接受我从文件中读取的INT和字符串值。我的问题是要编辑数组内部的值,特别是分配了新值并访问其中的值。从文件中解析值后,我分配了我的值,但是当我尝试在下面打印出来时,我会得到一个细分错误。为什么我的代码将segfault保存在我的最后一个循环中,我是否必须在一系列指针中打印出与往常不同的值?谢谢!

sizeof(table)不是3。实际上是24个,即3*8(阵列元素的数量*地址的大小)。您会得到细分故障,因为您尝试访问未分配的table[3](等)。

相关内容

  • 没有找到相关文章

最新更新