所以我试图在新行的每个文本文件中获取行数。到目前为止,我有这种方法......
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语言中使用随机语的概念现在让我感到困惑。
提前致谢!
答案 0 :(得分:2)
我认为fgetc()返回一个int,但是你将返回的值填充到一个char中(没有将它转换为char),所以你得到了返回的int的第一个字节在正确的位置(在你的ch变量中) )但是额外的三个字节溢出到你的c变量中,该变量在堆栈上的ch旁边定义。当你递增c时,它会增加第一个字节(这意味着你在一个大端机器上),但你的int中额外的三个字节是不受影响的,并且由于getc()返回的覆盖而被破坏。这就是你的答案中的第一个字节看起来正确的原因。尝试将ch定义为int,我打赌你的问题会消失(尽管你可能需要添加一些转换来避免编译器错误/警告)。