fgets()错误:"没有可用的源..."

时间:2014-05-02 21:54:16

标签: c debugging fgets

当我开始我的程序时,我给出了这样的输入:

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

程序读取每一行然后执行一些方法,但是当它到达第五行(" 2")时,它会出现错误信息:"没有可用的来源& #34; 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,无论如何,谢谢!

2 个答案:

答案 0 :(得分:3)

您正在将未初始化的指针传递给fgets,将您的代码更改为

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

你最有可能破坏记忆。

答案 1 :(得分: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);