将char [] []转换为char **

泽尔

我有一个 char[][]

  char c[2][2]={
    {'a','b'},
    {'c','d'}
  };

如何将其转换为char**

此处的目的是将转换后的内容char**用作主要功能的输入,该功能仅接受char**其输入。两种C / C ++解决方案都是可以接受的。

克里斯多夫

虽然您可以轻松地从切换char[]char*,但是使用char[][]则无法实现char**

  • char[2][2]是一个二维数组,其中所有元素都连续存储。要访问一个元素,编译器会知道每一行的大小来计算偏移量。
  • char**指向包含指向char的指针的数组。要访问一个元素,编译器将计算指针在最左侧的偏移量,加载该Poitner,然后访问该元素。

解决方法:

char *pc[2]={c[0],c[1]}; 
cout << pc[1][1]<<endl;   // prints out the same as c[1][1]
// you can pass `pc` when a `char**` is needed

备注:可以完美编译。但是,某些带有参数的函数(例如char **avExpect)实际上av[i]是一个以null结尾的c字符串。在这种情况下,尽管您的代码可以编译,但结果可能不是您期望的(缓冲区溢出)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章