接受integer主参数,然后使用它们来声明一个数组,问题是constantness
Accepting integer main arguments then using them to declare an array, issue with constantness?
我的main接受命令行参数(碰巧都是int),然后我需要用它在堆栈上创建一个数组。
int main(int ragc, char *argv[]) {
互联网让人觉得约定是char*,因为我的命令行参数只会是整数,所以可以接受int*吗?
其次,我需要使用以下两个参数来声明:
char databuf[nbufs][bufsize]; // where nbufs * bufsize = 1500
但是编译器对我大喊nbufs和bufsize需要有一个常数值。不幸的是,它们必须是int,我接受它们作为命令行参数,那么它们怎么会是常数值呢?
int main(int ragc, char *argv[]) {
int nbufs = atoi(argv[3]); //grabs the nbufs
int bufsize = atoi(argv[4]); //grabs the bufsize
char databuf[nbufs][bufsize]; //where nbufs * bufsize = 1500
如果main
有参数,那么第二个参数需要是char*
s(或const char*
s)的数组。规范中就是这样定义的。直观地说,不能保证命令行参数必须是整数;有人可以用文本参数运行你的程序,但不清楚报告错误的是谁的工作(操作系统还是你的程序)?
其次,在C++中,不能声明维度为非常量的数组。C允许你这样做(它们被称为可变长度数组),在C++1y(C++的下一个版本)中,这可能会得到支持,但目前你不能在C++中做到这一点。要解决此问题,请使用std::vector
秒的std::vector
,如下所示:
std::vector<std::vector<char>> databufs(nbufs, std::vector<char>(bufsize));
希望这能有所帮助!
因为我的命令行参数只能是整数,所以可以接受int*吗?
不,这是不可能的:标准规定单个参数为char*
。你对atoi
的使用对你所做的完全有效。
它们必须是int,我接受它们作为命令行参数,那么它们怎么会是常数值呢?
它们不能是常数值,因此需要使用动态分配。由于这是C++,所以更好的选择是字符串的向量;然而,char**
也是可能的:
char **dataBuf = new char*[nbufs];
for (int i = 0; i != nbufs ; i++) {
dataBuf[i] = new char[bufsize];
}
// Use dataBuf here
...
// Now free its memory
for (int i = 0; i != nbufs ; i++) {
delete[] dataBuf[i];
}
delete[] dataBuf;
注:C99允许使用可变大小的阵列;g++也允许这些作为扩展。但是,您应该小心使用扩展,因为它们会降低程序的可移植性。
它必须是char*
,因为char*
可以表示任何可能的值,但如果是int/int*
,则输入范围仅限于数字。我相信这就是为什么标准选择使用char*
来定义它。
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 输出错误,问题是找到总和5000位数字cpp
- 检查一个类型是否直接派生自"enable if"上下文中的另一个类型(是其子类型)
- 在学习数据结构之前对STL有一个了解是好的吗?
- c++无值sort()的问题是什么?
- 为什么在分配给成员变量之前获取unique_ptr的返回是一个问题?
- 在C++,重复申报仍然是一个问题吗?
- "Memory Fragmentation"这仍然是一个问题?
- 我是编码新手,我面临一个问题
- 在C++中,这个Eigen::张量的声明是安全的,还是有缺陷的?我应该为它提交一个问题吗
- 我如何让我的部分代码循环并重复一个问题,直到答案是有效的输入C++
- 为什么模板类型定义在 C++(不是 C++11)中是一个问题
- 对于这种类型的二进制IO操作,持久性会是一个问题吗
- 我正试图将一个过程的结果写入一个文本文件,我遇到的问题是列的对齐问题
- 何时使用并行计数-当内存是一个问题时,MIT HAKMEM用于位计数
- 提升还是不提升——这是一个问题
- 我应该使用哪个TLS库,可移植性是一个问题
- 是变形还是被封装,这是一个问题!(c++)