此分配要求我们只使用我们被告知使用的特定变量。这意味着我们不能创造我们自己的任何一个。这是导致段错误的代码:scanf在文件中读取时给出分段错误
int mem[100];
int *instructionCounter;
int *instructionRegister;
int *operationCode;
int *operand;
char str[20];
memset(str, 0 , 20);
scanf("%d %s %d" , instructionCounter, str, operand); //this is where the error occurs
我尝试使用fgets而不是scanf来读取字符串。我成功读取了字符串,并试图根据需要使用sscanf来解析它。但是,由于int指针实际上并不指向任何变量,因此我也收到了分段错误。但正如我所说,我不能创建比上面列出的任何其他变量。这就是我采取这种方法的原因。
我该怎么做才能避免这种分段错误?除了scanf还有什么办法可以解决这个问题吗?谢谢你的帮助。
你的整数指针不指向任何地方,所以运行时的崩溃抱怨。这个是正常的。实际上,你需要整数变量(而不是指向整数的指针),然后传递'&instructionCounter'。字符串不需要&符号,所以'str'是可以的。 memset()并不是真的有必要,尽管它也没有害处。您应该使用'%19s'而不是'%s'来防止事故发生(缓冲区溢出事故)。 – 2015-04-03 02:04:13
你有没有试过把这些指针指向实际的'int',比如'mem'数组中的那些? – SleuthEye 2015-04-03 02:06:10