簡體   English   中英

在字符串C指針中循環時出現段故障

[英]Seg Fault When Looping in Strings C Pointer

修正:嘿,當我嘗試計算文本中的單詞時,我在C中遇到了這種奇怪的分段錯誤。 誰能解釋我的原因以及段錯誤的解決方案?

這是我的源代碼:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

int isword(char *str) {
    return (isalnum(*(str + 1))) ? 1 : 0;
}

int main() {
    char **text, c;
    int n, i, j;

    //reading from stdin & allocating it dynamically
    scanf("%d\n", &n);
    text = malloc(n * sizeof(char *));
    for(i = 0; i < n; i++) {
        text[i] = malloc(200 * sizeof(char));
    }

    for(i = 0; i < n; i++) {
        for(j = 0; ; j++) {
            scanf("%c", &c);
            if(c == '\n') {
                break;
            }
            text[i][j] = c;
        }
    }

    // Counting words
    int word_counter = 0;
    char *delimitor = " ";
    char *pos;
    for(i = 0; i < n; i++) {
        pos = text[i];
        do {
            if(isspace(*pos) && isword(pos)) {
                word_counter++;
            }
            pos ? pos++ : pos;
            // pos++;
        } while(*pos != '\0');
    }

    printf("Number of words: %d\n", word_counter);
    return 0;
}

輸入示例:

4
Adam baked a pie.
Mary   went         to a movie
Mark goes like ?? him
Gina is, hot

請注意第二句中過多使用空格。

關於從stdin閱讀,我還有另一個問題。 有沒有更好的方法來實現這一目標? 我的意思是我嘗試使用fgets ,但是失敗了,而且我知道我不應該使用gets (地獄,即使您使用gets,GCC也會發出警告)。

另一個問題:為什么不打印預期的單詞數? 它打印12而不是14?

    pos ? pos++ : pos;
    // pos++;
} while(pos != '\0');

    *pos ? pos++ : pos;
    // pos++;
} while(*pos != '\0');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM