[英]Illegal Instruction: 4 in C-program
我是 C 的完整初學者,目前正在完成 Kernighan 和 Ritchie 編寫的 C 編程語言書中的練習。 這個特定的練習是 1.13,我正在嘗試制作一個程序,根據輸入的單詞的長度輸出直方圖。 但是,在編譯和運行這段代碼時,我在控制台中按 Enter 后收到以下錯誤:
非法指令:4
代碼本身肯定有問題且不完整,但我只是想在這里測試一下。 問題是我無法弄清楚這個錯誤是從哪里來的。 我正在使用 Macbook 並嘗試在編譯到 gcc 期間指定我的操作系統版本,但這對問題沒有幫助。
#define WORD 0
#define NONWORD 1
int main(void)
{
int c, i, j;
int state;
int incrementer;
/* This solution only works for word-lengths below 20 characters.
Can be expanded/decreased by resizing wordLengths-array to any given length. */
int wordLengths[20];
while ((c = getchar()) != EOF) {
if (c == ' ' || c == '\t' || c == '\n'){
state = NONWORD;
} else {
state = WORD;
}
if (state == WORD) {
incrementer++;
}
if (state == NONWORD && incrementer != 0) {
wordLengths[incrementer-'1']++;
incrementer = 0;
}
}
for (i = 0; i < sizeof(wordLengths); i++) {
printf("%d |", i);
for (j = 0; j < wordLengths[i]; j++) {
putchar('=');
}
printf("\n");
}
printf("Hello world");
}
調試器是你最好的朋友。 您會立即意識到您的incrementer
器不足以計算它所在的單詞或用作數組的索引。
一種可能性是引入一個單獨的變量來計算單詞並將測量長度寫入數組的相應成員
int wcnt = -1;
通過以下方式:
if (state == WORD) {
if(incrementer == 0)wcnt++;
incrementer++;
}
if (state == NONWORD && incrementer != 0) {
wordLengths[wcnt] = incrementer;
incrementer = 0;
}
並將其用於printf()
ing 數組成員的寫入大小:
for (i = 0; i <= wcnt; i++){ … }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.