用char指针加载文件

时间:2013-04-08 12:18:26

标签: c++ file pointers load char

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

// Constructor
Foo(char* fileName)

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

4 个答案:

答案 0 :(得分:3)

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。该数组通常也被假定为以空值终止,这意味着有char0标记字符串的结尾。字符串在内存中看起来像这样:

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

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

Foo foo(str);

但是,请注意,在C ++ 03中不推荐将字符串文字直接传递给构造函数,而在C ++ 11中则完全无效。你不能这样做:

Foo foo("filename.txt");

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

答案 1 :(得分:0)

历史上,C的创建者认为我们可以传递可以传递数组的指针,反之亦然。

如果你对这个概念有所了解,那么它们是密切相关的。指针可以浏览内存的许多部分(包括一个数组,这是一个除了另一个之外的内存字节)。

使用指针而不是数组,并使用++和 - 运算符(我们称之为指针算术),您可以移动到内存中,就像使用索引值移动数组一样。

C字符串中的规范是使最后的'\ 0'字符分隔字符串的结尾。移动指针直到此结束,然后你有整个字符串数组。

答案 2 :(得分:0)

char*是指向角色的指针。 文件名可以是字符数组char fileName[12] = "myFile.txt"; [除了string等]在这种情况下,char*指针用于指向此数组的第一个字符。当你必须打印它时,编译器会获取指针给出的地址[k.a.基地址]并通过获取其地址来保持打印每个字符。 char的地址是通过将下标添加到基地址获得的,直到\n

所以你可以利用

char* fileName = "myFile.txt"; or char fileName[11] = "myFile.txt";
Foo(fileName);

或Foo(“myFile.txt”);

答案 3 :(得分:-3)

char *是一个字符数组,我相信它与字符串相同