c ++通过使用argc和argv读取文本文件

时间:2015-10-02 23:52:32

标签: c++

////////// new update!!!!! //////////

.txt有15个数字,最后一个数字是" 15" 1.我试着计算我的.txt文件中有多少(保存到我的索引中)数字。 2.使用索引创建动态数组大小。 3.将所有数字保存到我的动态数组中。

问题:如何将char动态数组覆盖到int动态数组。

我的终端有垃圾输出:

Open sucessues!!  
index: 15
buffer: 15
0
1073741824
0
1073741824
2136670223
32767
-1680479188
32767
0
0
0
0
0
0
0

int main(int argc, char* argv[])
{

char *nPtr = argv[1];
char *buffer = new char[5];
int index = 0;



ifstream fin(nPtr); //open the file
if (argc > 1){

// allocate the memory
if(!fin){

cout << "can't read the file!!" << endl;  
return -1;
}

if(fin){

    cout << "Open sucessues!! " << endl;
}




while (!fin.eof()){

fin >> buffer;
index++; //counting here!!!
}

cout << "index: " << index << endl; //print out the counting results!
cout << "buffer: " << buffer << endl; // checking the last number!  should "15"

delete[] buffer; // 
buffer = NULL;

int *number = new int[index]; 
char *temp = new char[index];
int *home = number; //home

while(!fin.eof()){

    fin >> temp;
    *number= atoi(temp); //im confessing right here!!!
    number++;
    temp++;
}



number = home;

for (int i = 0; i < index; ++i)
{
    cout << *number << endl;  //*number print out garbage, i don't know why!
    number++;
}




fin.close( );
}

return 0;
}
/////************

////////旧/////////不读/////我想知道如何使用argc和argv来读取文件:numbers.txt(里面的数字很少)。 我的目标是:在终端中使用我的./sort读取文件,如:./ sort number 然后使用buffer和index来计算里面的数量,使用index创建动态数组,最后我再次读取文件,但是改变了所有的&#34;数字&#34;通过使用atoi来实现int。

我收到了分段错误:我输入了11:我的终端中的./sort号码。

有人可以帮我吗?我需要那些数组来排序我的号码。 到目前为止我到了这里:

int main(int argc, char* argv[])
{ 
    char *nPtr = argv[1]; 
    char *buffer[3];
    int index = 0;


    ifstream fin(nPtr); //open the file


    // allocate the memory
    if(fin.is_open()){


    cout << "open" << endl;

            while(!fin.eof()){
                fin >> *buffer;
                index++;



            }

    cout << index << endl;
    }

1 个答案:

答案 0 :(得分:0)

char *buffer[3];

创建一个包含三个字符指针的数组。它没有分配任何存储指向。它不指定要指向的任何存储。这些指针可以指向任何东西。有效的记忆,无效的记忆,你哥哥的色情藏品,你不知道。如果你很幸运,他们会指向无效的内存,你的程序会崩溃。

fin >> *buffer;

尝试将从文件中读取的字符串放入上面三个指针中的第一个指向的内存中。由于我们不知道它们指向何处,因此我们不知道文件的输入将在何处写入。很有可能它会尝试写入无效的内存而程序会崩溃。

要解决此问题,请分配一些存储空间,将指针指向此存储区,然后读入指针。

例如

char *buffer[3];
char storage[128];
buffer[0] = storage;

然后再

fin >> *buffer;

那就是说,我认为这根本不是你想要的。更有可能

char *buffer[3];

应该是

char buffer[3];

在这种情况下

fin >> *buffer;

将从文件中恰好读取一个字符到缓冲区中,因此这可能也是一个错字

fin >> buffer;

是什么意思。警告!!!如果从fin读取的字符串超过2个字符,这可能仍会崩溃。您可能想要重新考虑这一点。

如果允许使用std::stringstd::vector,但是看到它仍处于学期的早期,你的教练可能希望通过让你用岩石击打东西来教你代码,也许可以将小枝一起生产火。