C++ 2010中的文本文件数组

array of text files in C++ 2010

本文关键字:文件 数组 文本 2010 C++      更新时间:2023-10-16

我有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的工具库,如+用于追加,=用于赋值。