我想从文件流中读取z字节。然后我想在char数组中给出值。如果你能给我一个解释,我将不胜感激。那是我现在的代码:
char * getData(FILE * fp, long * x)
{
int z = 0;
char * data = malloc(sizeof(char) * BUFFLENGTH);
strcpy(data,"");
while(z < BUFFLENGTH-2)
{
if(feof(fp) == 0)
{
data[z] = fgetc(fp);
z++;
x++;
}
else
{
strcat(data,"\0");
return data;
}
}
}
我知道触发了分段错误引发了这一行:
data[z] = fgetc(fp);
但我不知道为什么。
答案 0 :(得分:0)
fgetc()
而不是使用feof()
后,您应该检查阅读是否成功。strcat()
的这种用法将调用未定义的行为如果从文件中读取一个或多个字节并且没有读取其值为零的字节,因为指针指向非空的-terminated字符串将传递给strcat()
,它将访问通过malloc()
分配但未初始化的区域。除此之外,您应该通过添加'\0'
来终止字符串。应用了这些建议的代码:
char * getData(FILE * fp, long * x)
{
int z = 0;
char * data = malloc(sizeof(char) * BUFFLENGTH);
if(data == NULL) return NULL;
/* strcpy() isn't needed because it will be overwritten */
while(z < BUFFLENGTH-2)
{
int input = fgetc(fp);
if(input != EOF)
{
data[z] = input;
z++;
x++;
}
else
{
data[z] = '\0';
return data;
}
}
free(data);
return NULL;
}