字符常量数组为空,即使已为其赋值[C ++]

时间:2016-12-31 08:48:53

标签: c++ arrays string character const

在字符常量数组中分配字符串值时遇到问题。每次将字符串值赋给字符数组的特定位置时。在字符串变量中获取新值后,数组中的位置值将初始化为空字符串。我努力想把它拿出来但是徒劳无功。以下是我正在使用的代码:

        const char *array[40];
        string line="";
        ifstream myfile( "text.txt");
        if (myfile) 
          {
            int in=0;
          while (getline( myfile, line ))  
            {

              array[in]=line.data();
                  in++;
           }
          myfile.close();
          }
        else return;

现在,数组变量具有所有空字符串值。请让我知道我该怎么做?

1 个答案:

答案 0 :(得分:0)

您正在访问string对象line的内部数据缓冲区,并让array[in]指向它。当读取下一行时,此缓冲区被覆盖或可能指向不同的内存位置,以便先前写入的array[in]指向已被新内容覆盖的内存或者根本无效。

如果要使用const char*[...]数组,请先复制缓冲区:

array[in]= strdup(line.c_str());

进一步注意,line.data()为您提供了一个数组但不保证最后的终止0x0。请参阅cppreference.com

上的string::data()文档