-2

だから私はコードのこのセクションを使用して単語のすべてのインスタンスを見つけようとしています

fseek(src, 0, SEEK_END);
int size = ftell(src); 
fseek(src, 0, SEEK_SET);
int line = 0;
int i = 0;
char ch = ' ';
char *word;
char lastch = 'x';
int j = 0;
int lines[getLines(src)];

for(i = 0; i < getLines(src); i++){
    lines[i] = -1;
}

for(i = 0; i < size; i++){
    ch = fgetc(src);
    printf("%s %c", word, '\n');
    if(!isspace(lastch) && isspace(ch)){

        if(strcmp(word, find) == 0){
            if(lines[j - 1] != line){
                lines[j] = line;
                j++;
            }
        }
    }else{

        if(isspace(lastch) && isspace(ch)){
            continue;
        }else if(isspace(lastch) && !isspace(ch)){
            word = "";
            append(word, ch);
        }else if(!isspace(lastch) && !isspace(ch)){
            append(word, ch);
        }
    }
    lastch = ch;
}

append()は

char *append(const char *s, char c) {
int len = strlen(s);
char buf[len+2];
strcpy(buf, s);
buf[len] = c;
buf[len + 1] = 0;
return strdup(buf);
}

文字列の単語に文字が追加されない理由を誰かに説明してもらえますか?

おかげで、それは追加機能に関係していると確信しています。

4

1 に答える 1

0

だから私のコメントを読んだ後、私の答えも読んでください:

word = "";
append(word, ch);

あなたが思っていることをしません。それword自体に文字を追加するのではなく、 の書き込み可能なコピーに文字を追加しますword。本当に書いた方がいい

} else if(isspace(lastch) && !isspace(ch)) {
    word = append("", ch);
} else if(!isspace(lastch) && !isspace(ch)) {
    char *tmp = append(word, ch);
    free(word);
    word = tmp;
}

代わりは。また、空白とインデントを適切に使用してください。コードが読みにくくなります。

于 2012-10-17T17:27:54.310 に答える