2014-05-02 34 views
1

當我開始我的節目我給這樣的輸入:與fgets()錯誤:「沒有可用的源......」

EKMFLGDQVZNTOWYHXUSPAIBRCJ 16 
AJDKSIRUXBLHWTMCQGZNPYFVOE 4 
BDFHJLCPRTXVZNYEIWGAKMUSQO 21 
ABCDEFGDIJKGMKMIEBFTCVVJAT 
2 
MCK 
QMJIDOMZWZJFJR 
ABC 
ESTAMENSAGEMVAISERCIFRADA 

程序讀取每個行,然後執行一些方法,但是當它到達第五行(「2」)將其與該錯誤消息crasches:0xb7e9f84f「‘’可用於無源」 在於該代碼對應於讀數如下:

fgets(cadeia1, 31, stdin); 
int rPos1 = getRotationPos(cadeia1); 
fgets(cadeia2, 31, stdin); 
int rPos2 = getRotationPos(cadeia2); 
fgets(cadeia3, 31, stdin); 
int rPos3 = getRotationPos(cadeia3); 
fgets(cadeiaRef, 26, stdin); 

r1 = createRotor(r1, cadeia1, rPos1); 
r2 = createRotor(r2, cadeia2, rPos2); 
r3 = createRotor(r3, cadeia3, rPos3); 
ref = createReflector(ref, cadeiaRef); 
m->r1 = r1; 
m->r2 = r2; 
m->r3 = r3; 
m->ref = ref; 

char* messages; 
fgets(messages, 3, stdin);  ////////////////////// This is where it crashes 
int nMessages = atoi(messages); 

我想知道什麼是錯的:s,謝謝!

+0

我們需要更多的代碼。 – nouney

+1

粗略猜測,您至少有一個錯誤。 –

+0

另外,下次進行調試構建 - 內置所有符號。 –

回答

0

您尚未分配消息空間(根據您發佈的內容)。您需要分配空間(malloc函數)或在使用前聲明一個字符數組。

例如:

char messages[3]; 
fgets(messages,3,stdin); 

char *messages; 
/* ask for memory */ 
*message = malloc(3); 
fgets(messages,3,stdin); 
/* do some processing */ 
/* release the memory back */ 
free(messages); 
3

你傳遞一個未初始化的指針fgets改變你的代碼

char messages[256]; // or w/e max length you have dictated. 
fgets(...); 

你最有可能破壞內存。

相關問題