fread(buf, sizeof(buf), 1, fp);

fread(buf, sizeof(buf), 1, fp); 这个buf数组定义多大 是不是根据fp指向的文件内容的 大小 printf("%s尀n尀n", buf); 出现很多烫烫烫 数组越界?我加了个buf[99]=✀尀0✀; 你帮忙看看代码吧#include<stdio.h>int main(){ FILE *fp; char buf[100]; char *p=buf; int i;fp=fopen("d:尀尀test.ini", "r"); fread(p, sizeof(buf), 1, fp); buf[99]=✀尀0✀; printf("%s尀n尀n", buf); p = strtok(buf, ";"); ⼀*if (p) { printf("%s尀n", p); }⼀* end of if(p) *⼀ while (p) { p = strtok(NULL, ";"); if (p) { printf("%s尀n", p); }⼀* end of if(9) *⼀ }⼀* end of while (p) *⼀ fclose(fp); return 0; }
2026年09月28日 00:13
有2个网友回答
网友(1):

其实“烫烫烫”是数组中未初始化时的值,不表示越界。你这样改
fp=fopen("d:\\test.ini", "r");
i=fread(p, 1, 99 , fp); //最多读99个字符,fread返回的是实际读到的字符数
buf[i]='\0';
这样就一定不会出“烫烫烫”了。
如果上面的fread返回的值为99,则表明文件还没读完,要继续读,且你要考虑读到的各段的拼接问题。简单办法就是扩大buf的大小,估计一般的ini文件都不会大于2048字节的。

另外size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
fread()的第二个参数表示读的每一个元素的长度,第三个表示希望读多少个这样的元素,所以你这里最好用
i=fread(p, sizeof(char), sizeof(buf)-1, fp);

网友(2):

fread第三个参数含义是读取字符个数,你的buf只有1个字符而且没有'\0'结束符,所以你的输出buf知道碰到buf所指向的地址后面存储的第一个'\0'才会停止,
%s改成%c吧