c++ - 表达式必须是可修改的左值 - 设置固定长度数组的动态数组的元素时
问题描述
在我的 C++ 程序中,我有一个动态 char 数组,其中该数组上的每个元素都是另一个长度固定的数组MAX_LINE_SIZE
。
这就是我在main
函数中定义这个数组的方式:
char (*text)[MAX_LINE_SIZE] = nullptr;
该数组应包含用户从标准输入输入的一些文本:
void init_text(char (*text)[MAX_LINE_SIZE], const int lines_count)
{
delete[] text;
text = new char[lines_count][MAX_LINE_SIZE];
for (int i = 0; i < lines_count; i++)
{
char* line = new char[MAX_LINE_SIZE];
read_line(cin, line);
text[i] = line;
}
}
问题出在这一行text[i] = line;
,VS Code 是这样说的:
expression must be a modifiable lvalue
当我尝试编译此代码时,我收到此错误:
prog20Feb20.cc: In function ‘void init_text(char (*)[256], int)’:
prog20Feb20.cc:32:19: error: incompatible types in assignment of ‘char*’ to ‘char [256]’
32 | text[i] = line;
我不明白这些错误。如果 的每个元素text
都是一个char
数组,为什么当我尝试将一个元素设置为text
数组时它会抛出该错误char
?
我该如何解决?
此函数是我无法使用的作业的一部分string
,vector
以及其他类或函数库。我必须明确处理指针。
这就是我实现该read_line
功能的方式:
void read_line(istream &is, char *line)
{
while (is.peek() == '\n')
is.get();
is.get(line, MAX_LINE_SIZE);
is.get();
}
解决方案
您不能分配给数组;你正在通过一个指向数组的指针没有区别。
此外,text[i]
是一个数组并且line
是一个指针,而指针不是数组。
此外,text[i]
已经是一个包含元素的数组MAX_LINE_SIZE
,您不需要为它分配任何动态内存。
您的代码很容易通过简化代码来修复。
for (int i = 0; i < lines_count; i++)
{
read_line(cin, text[i]);
}
推荐阅读
- dialogflow-es - 如何解决与 Play Store 相关的问题
- dataframe - 在 spark sql 中应用 isNll 后,实际值也被替换
- python-3.x - rgb的整数列表到图像python
- hyperledger-fabric - 超级账本结构区块链信息
- ionic-framework - 如何通过 Ionic 3 在 iOS 和 Android 中保持键盘打开(文本输入后单击按钮)
- c++ - C++ 多 for 循环性能
- javascript - 我怎样才能将它减少到更有效的方式
- javascript - 在 HTML Canvas 元素中定位圆圈的问题
- javascript - 如何从表单中添加到列表中?
- python - 为什么在使用“for”循环时会出现python 3整数类型迭代问题