我正在查看有人编写的两行代码,第二行有一个例外,但我不明白为什么。
char** array = (char**) new char [2] [6];
std_strlprintf(array[0],6,"[%d]", num);
std_strlprintf是一个Brew函数,它将格式化输出写入字符串。 (num是一个0的整数值)
为什么这段代码有异常,以buff [0]的形式访问数组的第一个元素有什么问题?
答案 0 :(得分:6)
二维数组与指针数组不同。
您的第一个语句创建两个六个字符的数组,每个作为单个内存块。将该语句替换为:
char (*array)[6] = new char [2][6];
你将完成你的第二个陈述。别忘了
delete [] array;
嗯,我应该知道:)在评论中提出你的问题:
我应该如何随后传递数组 以
char**
为例的函数 参数β
你没有。不是这种形式。如果要为某些C API(如execve(2)
)构建参数列表,则必须完全采用两阶段初始化:
// prototype of the function to call
void my_fancy_func( int argc, char* const argv[] );
char** my_argv = new char*[my_argc];
for ( i = 0; i < my_argc; i++ ) {
my_argv[i] = new char[arg_buffer_size];
snprintf( my_argv[i], arg_buffer_size, "%d", i );
}
my_fancy_func( my_argc, my_argv );