此分配要求我們只使用我們被告知使用的特定變量。這意味着我們不能創造我們自己的任何一個。這是導致段錯誤的代碼: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