C++ 2010中的文本文件数组
array of text files in C++ 2010
我有8个文本文件(存在于我的程序文件中),我想在数组中分配它们。但我遇到这个错误:("char*"类型的值不能用于初始化"int"类型的实体)。我的每个文件最多有15个字符
char *ArrTemp[8][15];//[number of strings][max size of every string]
char temp1[] = "temp1.txt";
char temp2[] = "temp3.txt";
char temp3[] = "temp5.txt";
char temp4[] = "temp7.txt";
char temp5[] = "temp9.txt";
char temp6[] = "temp11.txt";
char temp7[] = "temp13.txt";
char temp8[] = "temp15.txt";
ArrTemp[8][15] = {temp1,temp2,temp3,temp4,temp4,temp6,temp7,temp8};
ArrTemp[8][15] = {temp1,temp2,temp3,temp4,temp4,temp6,temp7,temp8};
是不对的。这不是初始化。它尝试将RHS分配给LHS。
删除
char *ArrTemp[8][15];//[number of strings][max size of every string]
,然后使用:
char* ArrTemp[8] = {temp1,temp2,temp3,temp4,temp4,temp6,temp7,temp8};
或
char* ArrTemp[] = {temp1,temp2,temp3,temp4,temp4,temp6,temp7,temp8};
在前面的示例中,变量ArrTemp被声明为char指针,但被用作二维char数组,这会抛出错误。您可以尝试使用指针数组来存储不同长度的字符串。请参考以下代码:
char temp1[] = "temp1.txt";
char temp2[] = "temp3.txt";
char temp3[] = "temp5.txt";
char temp4[] = "temp7.txt";
char temp5[] = "temp9.txt";
char temp6[] = "temp11.txt";
char temp7[] = "temp13.txt";
char temp8[] = "temp15.txt";
char *ArrTemp[] = {temp1,temp2,temp3,temp4,temp4,temp6,temp7,temp8};
这里有一堆误解没有得到解决。但首先,大象:
std::string要安全得多,而且几乎使所有这些都非常容易。
char *ArrTemp[8][15];//[number of strings][max size of every string]
不创建c风格字符串的数组。注意类型为char *
。它创建了一个8x15的指向c风格字符串的指针数组。取决于你想要什么,你可以选择。
char ArrTemp[8][15];
为8个14字符的c风格字符串分配存储空间(一个字符总是丢失给结束的NULL)。然后,您必须将字符串复制到数组中,但您可以完全控制存储,可以更改数组的内容。如果你现在不知道文件名是什么,只是想要存储,这是c风格的数组方式。
或
char * ArrTemp[8];
这将创建一个包含8个指针的数组,这些指针指向c风格的字符串,然后您将不得不指向字符串。
,
char temp1[] = "temp1.txt";
创建一个10个字符的数组,并将"temp1.txt"复制到其中。如果您想更改temp1,最好记住它是10个字符,因为如果您
char * ArrTemp[] =
{
temp1,
...
}
易于访问的temp1——sizeof(temp1)
——的大小丢失了。sizeof(ArrTemp[0])
将返回指向temp1的指针的大小,可能是4或8字节,而不是sizeof(temp1)
。
这意味着需要再做一次修改。
char temp1[16] = "temp1.txt";
必须预先定义数组的大小。注意,我使用16来匹配终止NULL。但16是一个丑陋的解决方案。可能会有很多16在代码中浮动当你想要21的时候会发生什么?你得把所有16号都找出来换掉。这不是个好主意,所以又做了一个小小的修改:
#define MAX_STRING_LENGTH 15
和
char temp1[MAX_STRING_LENGTH + 1] = "temp1.txt";
null = +1
但是…
如果temp1永远不会更改,则可以
const char * temp1 = "temp1.txt";
然后,稍微修改一下ArrTemp,您可以
const char * ArrTemp[] =
{
temp1,
...
}
但是如果你已经这样做了,那么你可以省去一些麻烦,直接在ArrTemp中定义c风格的字符串。
const char *ArrTemp[]
{
"temp1.txt",
"temp3.txt",
"temp5.txt",
"temp7.txt",
"temp9.txt",
"temp11.txt",
"temp13.txt",
"temp15.txt",
};
返回std::string.
这使得所有上述可变-不可变,"我的字符数组有多大?"的问题都解决了。
std::string ArrTemp[]
{
"temp1.txt",
"temp3.txt",
"temp5.txt",
"temp7.txt",
"temp9.txt",
"temp11.txt",
"temp13.txt",
"temp15.txt",
};
你有8个字符串预加载到ArrTemp。字符串可以更改。字符串的长度不重要。如果您试图过度填充std::string,它会变得更大。你可能需要用完电脑的内存来推动它的容量。您可以利用std::string的工具库,如+
用于追加,=
用于赋值。
- 如何将内容数组写入文本文件?
- C++将文本文件中的数据读取到结构数组中
- 将值从二维数组输出到文本文件
- C++数据文件、数组和计算赋值
- 如何拆分文件中.txt字母并使用c ++使用数组进行扑克?
- 如何在 C++ 中从文件中读取字符数组(带有一些空格)
- 如何从txt文件中读取多个不同长度的数组?
- 保存/加载大量短数组到二进制文件
- 从二进制文件中读取整数数组
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- C++ 使用存储在动态数组中的文本文件中的数据查找模式
- C++编程从外部文本文件定义数组大小
- 使用矢量将文本文件中的输入存储到 2D 数组中
- 如何将文本文件的特定行读取到 int 类型的数组中C++?
- 使用 stbi_write_png,如何将 0 和 1 的矩形字节数组转换为单色 png 文件?
- 将系数存储在头文件的数组中("does not name a type"错误)
- 在C++中使用变量而不是"#define"来指定数组大小是不是一种糟糕的做法?(C错误:在文件范围内
- 从文件读取,并写入函数C++中的数组
- 如何使用QJSONARRAY在QT5(C )中解析JSON文件(数组)
- 从文件/数组C++聚合数据