c++ - 为 char* 动态分配内存时出错

标签 c++ arrays char

所以主要问题是代码中存在运行时错误:

char *wordBank[]= {new char[numWords+1]};
char  buffer1[41];

for(int i=0; i<numWords;i++){
    ifile >> buffer1;
    int len = strlen(buffer1);
    cout << buffer1<<"and"<<len <<endl;
    wordBank[i] = new char[len + 1];
    strncpy(wordBank[i], buffer1,len);
    cout << wordBank[i]<<"and"<<len <<endl;
}

它开始搞乱 wordBank 中的内容了吗?它从一个 txt 文件中获取单词到 buffer1,然后复制到 wordBank 的动态分配的 char* 数组中。但是我总是遇到段错误并且单词都不正确。我做错了什么?

最佳答案

您可以使用 C++ 而不是 C 来简化代码:

vector<string> wordBank(numWords);
string buffer1;
for (int i = 0; i < numWords; i++) {
  ifile >> buffer1;
  size_t len = buffer1.length();
  cout << buffer1 << "and" << len << endl;
  wordBank[i] = buffer1;
  cout << wordBank[i] << "and" << len << endl;
}

或者更简单,但添加错误检查:

vector<string> wordBank(numWords);
for (int i = 0; i < numWords; i++) {
  if (ifile >> wordBank[i])
    cout << wordBank[i] << "and" << len << endl;
  else { // no more words
    wordBank.resize(i); // chop off the unused portion
    break;
  }
}

关于c++ - 为 char* 动态分配内存时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28422924/

相关文章:

在 C 中使用 snprintf 将字符转换为字符串

java - 如何在 Java 中将 char 或 int 发送到需要 string 作为 s 参数的方法?

python - 将一组加权和转换为 python 的优雅方法

javascript - 保留平面数组作为 2D 或 3D 数组的引用副本

c++ - 如果类型是在之后定义的,则实例化具有不完整类型的类模板是否格式错误?

c++ - std::atomic bool 变量的访问顺序

arrays - 在 bash v.3 中迭代数组

c++ - 如何在 Arduino 中将 char 转换为 int

c++ - 生成带有像素的图像的库

c++ - 实现文件对象 (C++)