用char指针加载文件
loading file with char pointer
我有一个类,它从需要char* fileName
的文件中加载数据,但不清楚如何以这种方式使用它。
// Constructor
Foo(char* fileName)
我知道char
只需要一个字符,但是有人可以澄清如何使用它吗?
A 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
。数组通常也被假定为以空结束,这意味着有一个char
,其值为0
,标志着字符串的结束。该字符串在内存中看起来像这样:
┌───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┬───┐
│ f │ i │ l │ e │ n │ a │ m │ e │ . │ t │ x │ t │ │
└───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┴───┘
因此,由于数组到指针的转换,您可以像这样将数组str
传递给构造函数:
Foo foo(str);
但是,请注意,在c++ 03中不赞成直接向构造函数传递字符串字面值,在c++ 11中完全无效。你不能这样做:
Foo foo("filename.txt");
问题是这个字符串字面值的类型是"数组13 const
char
"。转换为指针后,它是一个const char*
。您不能将const char*
传递给char*
参数,因为这会违反const
的正确性。
C语言的创建者历来认为可以传递数组的地方也可以传递指针,反之亦然。
如果你稍微想想这个概念,它们是密切相关的。指针可以浏览内存的许多部分(包括一个数组,它是一个字节的内存)。
使用指针而不是数组,并使用++和——运算符(我们称之为指针算术)可以在内存中移动,就像在数组中移动索引值一样。
C字符串的规范是使用最后的' '字符来分隔字符串的结尾。将指针移动到这一端,然后就得到了整个字符串数组。
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");
- 将 bmp 文件加载到 TSpeedButton 中
- 如何将文本文件加载到 QListwidget 并将其保存回来
- 从 C 可执行文件加载动态库时收到错误C++"undefined symbol"
- 优化从文件加载QImage
- 将csv文件加载到MySQL C++中
- 从文件加载结构
- 如何在 QT 中显示文件加载状态
- C++ 如何从文件加载异类集合
- 从文本文件加载链表并打印时无限循环
- Kotlin 从文件加载类的集合?
- 如何从文件加载QJsonDocument
- SFML 将图像从 txt 文件加载到矢量中仅加载最后一个图像
- 使用ifstream从DAT文件加载数据
- 从 C 中的文件加载结构时出现分段错误
- 从二进制文件加载列表后,我的代码似乎进入了无限循环
- Qml:从文件加载组件时将参数作为 URL 的一部分传递
- 将浮点数保存在文本文件中,然后从文本文件加载回去(OpenGL和C++)
- 从TXT文件加载迷宫
- 从文件加载uint64_t值
- 如何在 c++ 中将二进制文件加载/读取到"vector<vector< bitset<32> >"中?