C 查找某个单词的所有实例

标签 c string char append

所以我尝试使用这部分代码查找某个单词的所有实例

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);
}

有人可以向我解释为什么字符串单词没有添加任何字符吗?

我很确定它与 append 功能有关,谢谢。

最佳答案

所以在阅读我的评论后,也阅读我的答案:

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

并没有像你想象的那样做。它不会将字符 append 到 word 本身,而是将字符 append 到 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;
}

相反。另外,请正确使用空格和缩进,这很难阅读您的代码。

关于C 查找某个单词的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12939758/

相关文章:

c++ - 减去两个 IPv6 地址得到错误的值

c - 涉及 char 数组的 C 语句的含义

c - 将字符串拆分为结构体的元素

char * 设置为字符串文字时的编译器警告

c - 冒泡排序使数组为空

c - 为什么指向 char 的指针是当前的?

c - 安装仅项目非系统版本的 OpenSSL 和 libcrypt 库

c - QueryFullProcessImageName 因有效 HINSTANCE 失败?

c# - 重复字符的字符串压缩

c++ - 将字符串写入文件的最有效方法是什么?