我在用 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/