gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:23:44 27 4
gpt4 key购买 nike

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

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

出于某种原因,如果我在 while 的中间放置一个 printf for ch ,它将给出正确的行数,否则为 7801729。

另外,我如何生成一个从 0 到行数的随机整数?现在,在 C 中使用随机的概念对我来说相当令人困惑。

提前致谢!

最佳答案

我认为 fgetc() 返回一个 int 但您将返回的值填充到一个 char 中(而不将其转换为 char),因此您可以在正确的位置(在 ch 变量中)获取返回的 int 的第一个字节)但是额外的三个字节溢出到你的 c 变量中,该变量是在堆栈上与 ch 相邻定义的。当您增加 c 时,它会增加第一个字节(这表明您在大端机器上),但 int 中的额外三个字节不会受到影响,并且会因 getc() 返回的覆盖而损坏。这就是为什么你的答案中的第一个字节看起来是正确的。尝试将 ch 定义为 int,我敢打赌您的问题就会消失(尽管您可能需要添加一些转换以避免编译器错误/警告)。

关于C 获取单词文本文件中的行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575490/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com