에서 나는 다음과 같은 구조체구조체 문제는 C
typedef struct rotor {
char characters[26];
char* rotationPos;
char* aPosition;
} rotor;
을하고 난 이런 식으로 3 개 인스턴스를 만들려면 :
rotor* createRotor(char* cadeia, char* c) {
int aux;
rotor* r;
for (aux = 0; aux < 26; aux++) {
if (cadeia[aux] == NULL || strlen(cadeia) > 26) {
return -1;
} else
r->characters[aux] = cadeia[aux];
}
r->characters[26] = '\0';
r->rotationPos = c;
r->aPosition = r->characters[0];
return r;
}
:
char cadeia3[26] = "BDFHJLCPRTXVZNYEIWGAKMUSQO";
char cadeia2[26] = "AJDKSIRUXBLHWTMCQGZNPYFVOE";
char cadeia1[26] = "EKMFLGDQVZNTOWYHXUSPAIBRCJ";
rotor* r1;
rotor* r2;
rotor* r3;
r1 = createRotor(cadeia1, 20);
r2 = createRotor(cadeia2, 20);
r3 = createRotor(cadeia3, 20);
가 createRotor
기능은 자동으로 회 전자를 생성
첫 번째 로터에서만 작동합니다 ... 콘텐츠를 확인하거나 사용하고 싶을 때마다 함수에서 다른 것들은 프로그램이 "종료"됩니다. 나에게 이상한 일은 완벽하게 일하고 다른 일을 위해 일하는 것이 아닙니다.
내가 뭘 잘못하고 있니?
왜'char * c' 인수에'20' 값을 전달합니까? – lurker
내게 이상한 것은 그것이 전혀 작동한다는 것입니다. 그의 [답변] (http://stackoverflow.com/a/23376410/15168)에서 [amit] (http://stackoverflow.com/users/572670/amit)으로 진단 된대로, 당신은 로터를위한 공간을 할당하지 않습니다 , 첫 번째 호출에서 충돌이 발생하지 않는다는 것이 놀랍습니다 (또는 불운이되어 충돌이 발생하지 않음). 하지만 그것은 정의되지 않은 동작과 관련된 문제입니다. 일어날 일을 예측할 수 없습니다. 컴파일러 경고에 더 많은주의를 기울여야합니다. 그것이 당신에게 말해야 할 모든 종류의 것들이 있습니다. 컴파일러는 C보다 C에 대해 더 많이 알고 있음을 기억하십시오. –