我想从文件流中读取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);
但是我不知道为什么。
最佳答案
您应该检查分配是否成功。
您应该在调用fgetc()
而不是使用feof()
之后检查读取是否成功。
如果从文件中读取一个或多个字节并且没有读取其值为零的字节,则使用strcat()
会引起未定义的行为,因为指向非空终止字符串的指针将被传递给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;
}
关于c - 使用fgetc()时出现段错误。我该如何解决?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35815215/