C 访问结构中的元素

标签 c struct

我在用 C 编写程序时遇到了麻烦。 我定义了一个结构:

typedef struct {
  char* alphabet;         /* Defines the supported characters by the encryption algorithm     */
  char* symbols;          /* Defines the symbols used to encrypt a message                    */
  char* dictionary;       /* Defines the translation for all characters defined in alphabet   */
  char* transposition;    /* Defines the transposition key used in the second encryption step */
} adfgx_machine;

我还创建了一个方法来创建此结构的实例:

adfgx_machine* am_create(char* alphabet, char* symbols, char* dictionary, char* transposition) {
    adfgx_machine machine;
    if(strlen(alphabet)*2!=strlen(dictionary)){
        printf("s", "Het aantal karakters in de dictionary moet dubbel zoveel zijn als het antal  karakters in alphabet!");
        exit(1);
    }
    machine.alphabet=alphabet;
    machine.symbols=symbols;
    machine.dictionary=dictionary;
    machine.transposition=transposition;
    return &machine;
}

现在我试图打印例如结构的字母表(如果给出了这样的结构),但我的程序总是崩溃。我已经尝试过 [dot] 运算符,但该运算符也不起作用。这是我的代码:

void am_create_dictionary(adfgx_machine* am) {
    printf("%s",am->alphabet);

}

这是我的主要方法:

int main(int argc, char* argv []) {
    adfgx_machine* mach = am_create("azert","azert","azertazert","azert");
    am_create_dictionary(mach);
    return 0;
}

所以如果我用 am.alphabet 替换 am->alphabet 它也不起作用。我做错了什么?

更新:

如果我不使用我的方法而是直接在主方法中打印它,它确实有效吗?!那么我的主要方法就变成了:

int main(int argc, char* argv []) {
    adfgx_machine* mach = am_create("azert","azert","azertazert","azert");
    printf("%s",mach->alphabet);
    return 0;
}

最佳答案

主要问题是您在堆栈上分配返回值。它很可能会被覆盖。你最好使用malloc()

adfgx_machine* am_create(char* alphabet, char* symbols, char* dictionary, char* transposition) {
    adfgx_machine* machine = malloc(sizeof(*machine));
    if(strlen(alphabet)*2!=strlen(dictionary)){
        printf("s", "Het aantal karakters in de dictionary moet dubbel zoveel zijn als het antal  karakters in alphabet!");
        exit(1);
    }
    machine->alphabet=alphabet;
    machine->symbols=symbols;
    machine->dictionary=dictionary;
    machine->transposition=transposition;
    return machine;
}

关于C 访问结构中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26366264/

相关文章:

c - 嵌套 For 循环发牌

c - 分配新节点后根节点的值(空值)没有改变

C++ 结构无效使用非静态数据成员

c - 在 C 中取消引用指向不完整类型队列的指针

无需访问库即可将整数转换为字符串

c - 将消息翻译为 B1FF 语言时出现问题

c++ - struct function greater 在这段代码中是如何工作的?

c - 路由追踪理论

c - 具有重叠操作的 Switch 中的多个案例

c - 如何使用定义来初始化结构体?