【问题标题】:cin input user for dynamic allocation of array of stringscin 输入用户,用于动态分配字符串数组
【发布时间】:2022-01-17 09:03:29
【问题描述】:

我是新手,学习 c++,尝试动态分配字符串数组并由用户输入每个字符串。所以首先,用户输入字符串的数量,然后将每个字符串使用cin>>

int main() {


    int numberOfTeams;
    char** Teams;

    cout << "Enter the number of teams " << endl;
    cin >> numberOfTeams;

    Teams = new char* [numberOfTeams] ;

    
    for (int i = 0; i < numberOfTeams; i++) {
        
            cin >> Teams[i];
                
    }

    delete[] Teams;

    return 0;
}

程序在 cin 一个字符串之后把我扔了出去。 我得到的错误是:

 Exception thrown: write access violation.
**_Str** was 0xCEDECEDF.

我不能使用“字符串”验证,只能使用字符数组。

谢谢大家

【问题讨论】:

  • 你需要在cin &gt;&gt; Teams[i]; 之前分配Teams[i] 记住Teams[i] 是一个字符指针但是你没有初始化它来指向任何东西。
  • 感谢所有 cmets。我如何在 cin 之前分配“Teams[i]”?不幸的是,学校规定不使用“string”
  • 尝试在cin &gt;&gt; Teams[i]; 之前加入 Teams[i]。使用 new 或 malloc,例如 Teams[i] = new char[512]Teams[i] = (char *)malloc(512)

标签: c++ string dynamic-memory-allocation


【解决方案1】:

类似的东西

const int MAX_STRING_SIZE = 1024;

int main() {


  int numberOfTeams;
  char** Teams;

  std::cout << "Enter the number of teams " << std::endl;
  std::cin >> numberOfTeams;

  Teams = new char*[numberOfTeams];
  for (int i = 0; i < numberOfTeams; i++) {
    Teams[i] = new char[MAX_STRING_SIZE];
    std::cin >> Teams[i];
  }
  for(int i = 0; i < numberOfTeams; ++i) {
    delete [] Teams[i];
  }
  delete [] Teams;

  return 0;
}

【讨论】:

  • @EY178 请务必使用 delete [] Teams,但不要像其他帖子中那样 delete Teams[i],因为这可能导致内存泄漏。
【解决方案2】:

char** 是指向字符指针数组的指针。您要做的第一件事是分配字符指针数组 Teams = new char*[numberOfTeams]; Teams 现在指向 numberOfTeams char* 指针中的第一个 char*。您的错误是对于数组中的每个 char* 指针,您没有执行分配。这是正确的解决方案。

#include <iostream>
using namespace std;
int main() {

    int numberOfTeams;
    int teamNameLength = 32;
    char **Teams;

    cout << "Enter the number of teams " << endl;
    cin >> numberOfTeams;
    Teams = new char*[numberOfTeams];

    for (int i = 0; i < numberOfTeams; i++)
    {
        Teams[i] = new char[teamNameLength];
    }

    for (int i = 0; i < numberOfTeams; i++) {
        cout << "Enter team name " << i+1 << endl;
        cin >> Teams[i];
    }

    for (int i = 0; i < numberOfTeams; i++) {
        delete[] Teams[i];
    }
    delete[] Teams;

    return 0;
}

【讨论】:

    猜你喜欢
    • 2015-07-28
    • 2020-08-23
    • 1970-01-01
    • 2021-07-03
    • 2020-12-09
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多