C获取单词文本文件中的行数

时间:2012-09-25 02:34:27

标签: c pointers random character line

所以我试图在新行的每个文本文件中获取行数。到目前为止,我有这种方法......

char * getS(char *fileName){
    FILE *src;
    if((src = fopen(fileName, "r")) == NULL){
        printf("%s %s %s", "Cannot open file ", fileName, ". The program is now ending.");
        exit(-1);
    }
    char *get = ".";        

    int c = 0;
    char ch = 'x';
    while(ch!=EOF) {
        ch = fgetc(src);
        if(ch == '\n')  c++;
    }
    fseek(src, 0, SEEK_SET);
    printf("%i",c);
    int random = rand() % (c - 1);
    return get;
}

出于某种原因,如果我在一段时间内为ch放置一个printf,它会给我正确的行数,否则为7801729。

另外,我如何从0到行数进行随机int?在C语言中使用随机语的概念现在让我感到困惑。

提前致谢!

1 个答案:

答案 0 :(得分:2)

我认为fgetc()返回一个int,但是你将返回的值填充到一个char中(没有将它转换为char),所以你得到了返回的int的第一个字节在正确的位置(在你的ch变量中) )但是额外的三个字节溢出到你的c变量中,该变量在堆栈上的ch旁边定义。当你递增c时,它会增加第一个字节(这意味着你在一个大端机器上),但你的int中额外的三个字节是不受影响的,并且由于getc()返回的覆盖而被破坏。这就是你的答案中的第一个字节看起来正确的原因。尝试将ch定义为int,我打赌你的问题会消失(尽管你可能需要添加一些转换来避免编译器错误/警告)。