2017-08-08 54 views
-5

我需要在初始化非常量大小时使用的C++ char数组。大小必须是非常量,因为它是从函数生成的,并且不能使用向量,因此此char数组将用于读取和写入文件。例如:初始化时非常量大小的char数组

int i = functionToGetvalue(); 
unsigned char ch[i]; 
file1 >> ch; 
file2 << ch; 
+0

你不能做到这一点像那样。你将需要使用'new'(并且不要忘记在完成后删除[]') – litelite

+5

“不能使用vector,因此这个char数组将用于读写文件。” - 你可以用矢量或字符串来做到这一点。 –

+0

'functionToGetvalue'做什么?你可能会把它标记为“constexpr”。 – Rakete1111

回答

5

前提是错误的。虽然有理由更喜欢C风格的阵列(或std::array)载体,你肯定不是一个。您当然可以使用std::vector来读取和写入文件,因为它确保在内存中是连续的。

例子:

std::vector<char> vec; 
vec.resize(255); 
ssize_t sz = read(fd, vec.data(), vec.size()); 

在你原来的例子,你正在使用格式化的流I/O,在这种情况下,std::string是一个最好的工具:

std::string str; 
file1 >> str; // reads up to the next white space into str 
+0

它不会帮助我需要加载特定位置上的文件的特定部分。该部分可以包含空格的第二件事,因此它不能以空格结束。 –

+3

@DavidHusička,任何你需要c样式阵列的人都可以用矢量来处理数据加载。用c-style数组发布实际的代码,然后我会告诉你如何用vector实现。 – SergeyA

+0

@NathanOliver,我还没有看到'std :: unique_ptr <[]>'会比'vector'有任何好处(除了可能在vector的实现本身之外)。 – SergeyA