Ich schreibe ein Programm in C, um die Verschiebung in einer Ceaser-Chiffre zu finden.c- Fehler beim Zuweisen des Strukturelements in der Funktion
Als Teil dieser ich zunächst alle möglichen Verschiebung, 0-26, auf die Nachricht zu entschlüsseln, verwende ich eine Struktur, um die Verschiebung und die Nachricht zu speichern. Dazu habe ich eine Funktion als Zeiger an eine Funktion übergeben. Wenn ich jedoch versuche, das Nachrichtenelement der Struktur in die entschlüsselte Nachricht zu ändern, erhalte ich den Fehler: ungültiges Typargument von '->' (have 'int') in der Zeile 'strcpy (s-> message, cipherText); ".
In der Funktion I zuweisen Sie auch eine lokale Variable zu einem Strukturelement und das funktioniert gut.
Code:
#include <stdio.h>
#include <string.h>
#define ENCRYPT 0
#define DECRYPT 1
struct Solution {
int key;
char message[];
};
void Ceaser(struct Solution *s, char cipherText[], int mode);
void main(){
struct Solution solutions[26];
char cipherText[] = "lipps, asvph.";
for (int i = 0; i <= 26; ++i) {
solutions[i].key = i;
Ceaser(&solutions[i], cipherText, DECRYPT);
printf("Key: %d\tPlain text: %s\n", solutions[i].key,
solutions[i].message);
}
}
void Ceaser(struct Solution *s, char cipherText[], int mode) {
int len = strlen(cipherText);
int c;
int key = s->key;
for (int s = 0; s <= 26; ++s) {
if (mode == DECRYPT) {
key *= -1;
}
for (int i = 0; i < len; ++i) {
c = cipherText[i];
if (c >= 'A' && c <= 'Z') {
cipherText[i] = 'A' + ((c + key - 'A') % 26);
} else if (c >= 'a' && c <= 'z') {
cipherText[i] = 'a' + ((c + key - 'a') % 26);
}
}
//Error occurs below
strcpy(s->message, cipherText);
}
}
's-> message':' char message []; 'hat keine Leerzeichen. – BLUEPIXY
Das Problem ist, dass Sie zwei Variablen mit dem Namen s haben. Der innere Int s schattet die äußere Lösung * s. Wenn Sie gcc verwenden, ist das -Wshadow-Flag geschickt, um solche Probleme zu finden. –
@BjornA. Danke, ich dachte, es wäre etwas Einfaches. Ich kann nicht glauben, dass ich den Konflikt nicht bemerkt habe. Danke auch für den Compiler-Tipp. – Henry