c++ - 使用 char 指针加载文件

标签 c++ file pointers load char

我有一个类,它从需要 char* fileName 的文件加载数据,但对如何以这种方式使用它没有清楚的了解。

// Constructor
Foo(char* fileName)

我知道 char 只接受一个字符,但有人可以澄清如何使用它吗?

最佳答案

char* 是“指向 char 的指针”。也就是说,它保存 char 对象的地址。使用指向数组中第一个元素的指针是很常见的。也就是说,如果将地址加 1,您将获得数组中下一个元素的地址。

┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│     │     │     │     │     │     │     │     │     │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
   ^
   └─ pointer to first element of an array

C 风格的字符串通常存储在 char 数组中。例如,这里我们将字符串 "filename.txt" 存储在 char 数组中:

char str[] = "filename.txt";

数组的名称可以隐式转换为指向其第一个元素的指针。也就是说,str 可以像指向 f 字符的指针一样使用。该指针的类型为 char*

这就是为什么我们经常将 char* 变量视为 C 风格字符串。尽管它实际上只是一个指针,但通常假定它们指向数组中的第一个 char。该数组通常也被假定为以 null 结尾,这意味着有一个值为 0char 标记字符串的结尾。该字符串在内存中看起来像这样:

┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ f │ i │ l │ e │ n │ a │ m │ e │ . │ t │ x │ t │\0 │
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘

因此,由于数组到指针的转换,您可以将数组 str 传递给您的构造函数,如下所示:

Foo foo(str);

但请注意,直接将字符串传递给构造函数在 C++03 中已被弃用,并且在 C++11 中完全无效。你不能这样做:

Foo foo("filename.txt");

问题在于该字符串文字的类型为“array of 13 const char”。转换为指针后,它是一个const char*。您无法将 const char* 传递给 char* 参数,因为这会违反 const 正确性。

关于c++ - 使用 char 指针加载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15878844/

相关文章:

c++ - 为 char 分配空间

java - 将 float 组写入文件

c - 将函数的地址获取到C中的结构中

c++ - 初始化列表奇怪地取决于参数的顺序?

c++ - 如何从指针中提取引用?

c++ - spirit boost x3 : compound attribute compile time error (enum class)

javascript - 如何获取 C 上本地文件的属性 : drive with JSP or Javascript?

c - 使用带有终止条件的 while(!feof) ,它仍然在 c 中进入无限循环

c++ - QObject* 和 void* 之间的转换

c++ - 如何正确使用vector<uint8_t>.data()?