输入大小取决于输入

时间:2015-08-31 18:08:17

标签: c++

如果有意义的话。

到目前为止,这是它的样子。

#include <iostream>

int main()
{
    char *buffer;
    buffer = new char[100];

    std::cin >> buffer;

    const int size = strlen(buffer);

    char input[size];

    delete buffer;
    return 0;
}

我知道我可以使用字符串库,但我试图不使用它。

我想根据输入的大小来设置char大小(在代码char输入中)。

我得到的错误是

expression did not evaluate to a constant
expression must have a constant value

在第12行,即

char input[size];

3 个答案:

答案 0 :(得分:0)

  

我知道我可以使用字符串库,但我试图不使用它。

您可以使用std::vector<char>。如果这也不是一个选项,请自己分配内存并确保释放内存。

char* input = new char[size+1];  // Add an extra for the terminating null characterr

....


delete [] input;

答案 1 :(得分:0)

如果它是您尝试为size数组分配给input的缓冲区数组中已用空间的长度,则可以使用两种方法...

#include <iostream>
using namespace std;

int main()
{
  char *buffer = new char[100];

  cin >> buffer;

  int spaceUsed = 0;

  for (unsigned int i = 0; i < 100; i++)
  {
    if (buffer[i] != '\0')
      spaceUsed++;
  }

  char input[spaceUsed];
  delete [] buffer;

  return 0;
}

... OR

#include <iostream>
using namespace std;

int main()
{
  char *buffer = new char[100];

  cin >> buffer;

  int spaceUsed = 0;

  while (*buffer++)
      spaceUsed++;

  char input[spaceUsed];
  delete [] buffer;

  return 0;
}

两个代码段都完全相同。当然,使用string库会让你的生活更轻松。

答案 2 :(得分:0)

对于std::cin,您需要预先分配缓冲区。如果你打算使用char[]并且你真的必须避免字符串,你必须确保分配足够的内存。

或者,您可以使用scanf("%c",&newChar)读取char,直到用户输入转义字符并为数组分配内存。 我不认为您仅限于使用iostream