私はCでプログラムを書いています。c-関数内で構造体メンバを代入する際のエラー
これの一部として、私は最初にすべての可能なシフト、0-26を解読するメッセージで実行します。私はシフトとメッセージを格納する構造体を使用します。これを行うために、構造体をポインタとして関数に渡しました。しかし、構造体のメッセージメンバーを解読したメッセージに変更しようとすると、次のエラーが表示されます。 'strcpy(s-> message、cipherText)'行に ' - >'( 'int' '
私は構造体メンバにもローカル変数を割り当てていますが、これは問題なく動作します。
コード:
#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 []; 'にはスペースがありません。 – BLUEPIXY
問題は、sという名前の2つの変数があることです。内側のintは、外側のSolution *をシャドウします。 gccを使用している場合、-Wshadowフラグはこのような問題を見つけるのに気の利いたものです。 @BjornA。 –
ありがとう、私はそれが私が紛争に気付かなかったと信じることができない単純なものになるだろうが。コンパイラのヒントもありがとう。 – Henry