【问题标题】:Multidimensional array as a flat array problem多维数组作为平面数组问题
【发布时间】:2011-03-22 21:20:27
【问题描述】:

我正在查看某人编写的两行代码,第二行有一个异常,但我不明白为什么。

char** array = (char**) new char [2] [6];

std_strlprintf(array[0],6,"[%d]", num);

std_strlprintf 是一个将格式化输出写入字符串的 Brew 函数。 (num是一个整数,为0)

为什么这段代码会出现异常,将数组的第一个元素作为 buff[0] 访问有什么问题?


编辑:抱歉,我最初的帖子中有错字。现在更正了。 这是有异常的代码。

【问题讨论】:

  • 第一行你声明了一个名为'array'的变量......什么是buff?你的意思是 std_strlprintf(array[0],6,"[%d]", num); - 但它应该是 std_strlprintf(array[0][0],6,"[%d]", num);
  • 如果你需要在新的时候投射你做错了。
  • 我确实是这个意思,但如果它是 array[0][0] 那么这将是传递一个 char 而不是 char* 到 std_strlprintf()。

标签: c++ brew-framework


【解决方案1】:

二维数组不等于指针数组

您的第一条语句创建了两个包含六个字符的数组,每个 作为一个内存块。将该语句替换为:

char (*array)[6] = new char [2][6];

然后你就会对你的第二个陈述做好准备了。别忘了

delete [] array;

编辑0:

嗯,我应该知道 :) 评论中的问题:

我应该如何随后传递数组 到一个将char** 作为 参数?

你没有。不是这种形式。如果您正在为 execve(2) 等某些 C API 构建参数列表,则必须一路进行两阶段初始化:

// 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 );

【讨论】:

  • 谢谢,我应该如何随后将数组传递给以 char** 作为参数的函数?
猜你喜欢
  • 1970-01-01
  • 2020-03-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多