首页 > 解决方案 > 此示例代码是否需要调用 malloc() ?

问题描述

假设以下示例代码:

//open some file

char* data[10];

for ( int i=0; !feof(file) && i < 10; i++ )
{
    fgets( data[i], 100, file );
}

//close file

AFAIK 使用指针数组而不像这样为单个指针分配内存是不安全的,如果可行,那是因为该内存区域中恰好不包含任何重要信息。

但是我看到很多人这样使用它,我怀疑自己。

这是一个适当的用途吗?

标签: cpointers

解决方案


您的代码具有未定义的行为并且非常不安全。

数组的元素data是指针,它们的初始值是垃圾。它们可以指向用于其他目的的内存,或者指向不存在的内存。如果您的程序没有崩溃,我会感到惊讶。

你不需要打电话malloc。你可以定义

char data[10][100];

此外,您不应该使用feof来确定何时完成阅读输入。如果前一个输入函数由于输入不足而失败,feof则返回真值。如果除了输入用完之外还有运行以外的错误,将返回 true 而不会。使用返回的值来判断是否成功。ferrorfeoffgets


推荐阅读