【发布时间】:2018-08-15 21:39:53
【问题描述】:
我是初学者。我有一个文件,其中包含 MONSTER,ERRTU,14,2 之类的行。当我试图读取这些行并将它们存储到一个动态内存分配的数组中时。似乎它起初可以工作,但是当我稍后尝试打印它的元素时,它不能正常工作。是关于使用 char * 吗?我该如何解决这个问题?
这是我的代码;
char *lines_ptr;
line_ptr=(char *)malloc(line*(sizeof(char)*100));
int i=0;
if (fptr==NULL){
printf("file could not be opened.");
}
else{
//line=number of lines
while(!feof(fptr)){
for(i=0;i<line;i++){
fscanf(fptr,"%s",lines_ptr+i);
printf("%s\n",(lines_ptr+i));
}
}
printf("%s",(lines_ptr));//this part shows me i did something wrong.
}
这是我的输出;
HERO,DRIZZT,8,3
HERO,CATTIE,6,3
HERO,BRUENOR,10,1
HERO,WULFGAR,12,4
MONSTER,TROLL,4,3
MONSTER,GOBLIN,1,3
MONSTER,UNDEAD,1,1
MONSTER,VERMIN,3,2
MONSTER,MINDFLAYER,10,2
MONSTER,ERRTU,14,2
HHHHMMMMMMONSTER,ERRTU,14,2
为什么会这样?
【问题讨论】:
-
在 C 中,不赞成将 malloc 的返回值强制转换为 while(!feof(file))
-
@JGroven 应该改成什么?
-
看看here.
-
@JGroven 所以你认为唯一的问题是在你上面看到的代码中?
-
关于:
line_ptr=(char *)malloc(line*(sizeof(char)*100));1) 在 C 中,任何堆分配函数(malloc、calloc、realloc)的返回类型为void*。 IE。它可以分配给任何其他指针。强制转换只会使代码混乱,使其更难以理解、调试等。 2) 始终检查 (!=NULL) 返回值以确保操作成功。 3)表达式:sizeof(char)在标准中定义为1。任何东西乘以1绝对没有效果。
标签: c arrays file dynamic-memory-allocation