c - 此示例代码是否需要调用 malloc() ?
问题描述
假设以下示例代码:
//open some file
char* data[10];
for ( int i=0; !feof(file) && i < 10; i++ )
{
fgets( data[i], 100, file );
}
//close file
AFAIK 使用指针数组而不像这样为单个指针分配内存是不安全的,如果可行,那是因为该内存区域中恰好不包含任何重要信息。
但是我看到很多人这样使用它,我怀疑自己。
这是一个适当的用途吗?
解决方案
您的代码具有未定义的行为并且非常不安全。
数组的元素data
是指针,它们的初始值是垃圾。它们可以指向用于其他目的的内存,或者指向不存在的内存。如果您的程序没有崩溃,我会感到惊讶。
你不需要打电话malloc
。你可以定义
char data[10][100];
此外,您不应该使用feof
来确定何时完成阅读输入。如果前一个输入函数由于输入不足而失败,feof
则返回真值。如果除了输入用完之外还有运行以外的错误,将返回 true 而不会。使用返回的值来判断是否成功。ferror
feof
fgets
推荐阅读
- powerbi - 为什么 powerbi 平均/天计算在较长的时间跨度内变得不准确?
- python - 无法在 R Studio 上导入 Python 模块
- c++ - 我可以在 CreateFileW() 中使用 LockFileEx() 和 FILE_APPEND_DATA 吗?
- python - pytz 为“非洲/喀土穆”提供了错误的时区偏移
- java - 如何在 android 中使用来自 apache/poi/ss/formula/functions/Mirr.html 的 Mirr() 函数?
- php - 运行安装在我的机器上的 phpMyadmin MySql 和 MySQL root 的可预见问题
- python - 例如,如何获得夜间 = 1 的列的平均值/平均值
- python - 如何使用 Python 获取属性 XPATH 列表?
- python - 当我尝试附加值时出现 NameError
- c++ - c++中的动态分配问题,仅适用于第一次迭代