vecotr 容器中插入多条字符串,再将 vector 的地址转换为 char**

代码如下:

#include <stdio.h>

#include <string>
#include <vector> int main() {
std::vector<std::string> url_vector;
url_vector.push_back("www.baidu.com");
url_vector.push_back("www.taobao.com");
url_vector.push_back("www.google.com"); const char** urls = new const char*[url_vector.size() + 1];
for (size_t i = 0; i < url_vector.size(); i++) {
urls[i] = url_vector[i].c_str();
} // print
for (size_t j = 0; j < url_vector.size(); j++) {
// 移动 char* 指针
printf("%s\n", urls[j]);
printf("-----------------------分割线-------------1\n");
for (size_t k = 0; k < url_vector[j].size(); k++) {
// 移动 char** 指针
printf("%c", urls[j][k]);
}
printf("\n-----------------------分割线-------------2\n");
} return 0;
}

调试:

分析:

0 w w w . b a i d u . c o m  
1 w w w . t a o b a o . c o m
2 w w w . g o o g l e . c o m

char* 指针是解引用字符串的首地址,即 char[0],char[1],char[2] 分别存放的是三个字符串的首地址

char** 指针是解引用字符串中各个字符的地址,比如,char[0][0],char[1][0],char[2][0] 分别放的是三个字符串的首字母

我们可以查看它们所有的地址,

#include <stdio.h>

#include <string>
#include <vector> int main() {
std::vector<std::string> url_vector;
url_vector.push_back("www.baidu.com");
url_vector.push_back("www.taobao.com");
url_vector.push_back("www.google.com"); const char** urls = new const char*[url_vector.size() + 1];
for (size_t i = 0; i < url_vector.size(); i++) {
urls[i] = url_vector[i].c_str();
} // print
for (size_t j = 0; j < url_vector.size(); j++) {
// 移动 char* 指针
printf("%s\n", urls[j]);
printf("%p\n", urls[j]);
printf("-----------------------分割线-------------1\n");
for (size_t k = 0; k < url_vector[j].size(); k++) {
// 移动 char** 指针
printf("%c", urls[j][k]);
}
printf("\n-----------------------分割线-------------2\n");
for (size_t l = 0; l < url_vector[j].size(); l++) {
printf("%p\n", &urls[j][l]);
}
printf("\n-----------------------分割线-------------3\n");
} return 0;
}

结果:

笔记:

可以看作为一维数组(在内存中存储都是线性一维的)

一维数组 a[i] = *(a+i),同理二维 a[i][j] = *(a[i] + j) = *(*(a + i) + j)


printf("%p\n", urls[i]);
printf("%p\n", &urls[i]);
printf("%p\n", &urls);

打印 urls 的地址,

0x012F6964 存放的是字符串,见上图,

0x12F6820 存放的是 0x012F6964 地址,0xE4FE84 存放的是 0x012F6820 地址,见下图

另附:

How to convert vector<vector<int>>to int**?

std::vector<std::string> 与 char** 的转换的更多相关文章

  1. 单独删除std::vector <std::vector<string> > 的所有元素

    下面为测试代码: 1.创建 std::vector< std::vector<string> > vc2; 2.初始化 std::vector<string> vc ...

  2. matlab转c++代码实现(主要包含C++ std::vector,std::pair学习,包含数组与常数相乘,数组相加减,将数组拉成一维向量,图片的读入等内容)

    MATLAB部分: xmap = repmat( linspace( -regionW/2, regionW/2, regionW), regionH, 1 );%linspace [x1,x2,N] ...

  3. 关于==和equals()方法&Java中string与char如何转换&String,StringBuffer

    1.对于基本数据类型,可以直接使用==和!=进行内容比较 如:int x=30;        int y=30;         x==y;  //true 基本数据类型 简单类型(基本类型) bo ...

  4. std::vector<std::vector<> >

    上次看到这个有点晕了,其实这个vector保存的是std::vector<> #include <vector> #include <iostream> using ...

  5. string与char* 互相转换以及周边问题

    先插一个小知识点 string str = "abc" str += 'd'; cout<<str<<endl;  //"abcd"   ...

  6. string、char *的转换

    string转char* 主要有三种方法可以将str转换为char*类型,分别是:data(); c_str(); copy(); data()方法 string str = "hello& ...

  7. std::string,std::vector,std::accumulate注意事项

    在用string做字符串拼接时,会发现随着string的增大越来越慢,原因主要是string(和vector)是基于现行内存的数据结构,在海量数据时,经常会申请新的一块内存,把原有的数据拷贝过去然后再 ...

  8. C++ std::unordered_map使用std::string和char *作key对比

    最近在给自己的服务器框架加上统计信息,其中一项就是统计创建的对象数,以及当前还存在的对象数,那么自然以对象名字作key.但写着写着,忽然纠结是用std::string还是const char *作ke ...

  9. 实战c++中的string系列--std:vector 和std:string相互转换(vector to stringstream)

    string.vector 互转 string 转 vector vector  vcBuf;string        stBuf("Hello DaMao!!!");----- ...

  10. (原创)动态内存管理练习 C++ std::vector<int> 模拟实现

    今天看了primer C++的 “动态内存管理类”章节,里面的例子是模拟实现std::vector<std::string>的功能. 照抄之后发现编译不通过,有个库函数调用错误,就参考着自 ...

随机推荐

  1. [转帖]tidb Modify Configuration Dynamically

    https://docs.pingcap.com/tidb/v6.5/dynamic-config This document describes how to dynamically modify ...

  2. [转帖]必看!PostgreSQL参数优化

    https://zhuanlan.zhihu.com/p/333201734 前不久,一个朋友所在的公司,业务人员整天都喊慢. 朋友是搞开发的,不是很懂DB,他说他们应用的其实没什么问题,但是就是每天 ...

  3. [转帖]AHCI到NVMe,SSD的关键科技革命

      https://baijiahao.baidu.com/s?id=1718020841628703656&wfr=spider&for=pc HDD和早期SSD大部分使用SATA接 ...

  4. 感受 Vue3 的魔法力量

    ​ 作者:京东科技 牛至伟 近半年有幸参与了一个创新项目,由于没有任何历史包袱,所以选择了Vue3技术栈,总体来说感受如下: • setup语法糖<script setup lang=" ...

  5. 为mac搭建开发环境的笔记

    公司的游戏项目需要出ios包上架到app store,由我负责接入ios的sdk,这里记录一下为mac搭建开发环境的笔记,大多是软件和编程习惯相关的内容. 常用软件 解压缩软件:bandizip在ma ...

  6. MySQL【三】---数据库查询详细教程{分页、连接查询、自关联、子查询、数据库设计规范}

    1.分页 limit start count limit限制查询出来的数据个数,limit在语句最后 查找两个女性 select * from student where gender=1 limit ...

  7. 4.3 Windows驱动开发:监控进程与线程对象操作

    在内核中,可以使用ObRegisterCallbacks这个内核回调函数来实现监控进程和线程对象操作.通过注册一个OB_CALLBACK_REGISTRATION回调结构体,可以指定所需的回调函数和回 ...

  8. Python 调用Zoomeye搜索接口

    钟馗之眼是一个强大的搜索引擎,不同于百度谷歌,它主要收集网络中的主机,服务等信息,国内互联网安全厂商知道创宇开放了他们的海量数据库,对之前沉淀的数据进行了整合.整理,打造了一个名符其实的网络空间搜索引 ...

  9. a标签download属性跨域问题

    1.如果是加载了非同源的内容,该属性将失效,等于导航功能 2.在服务端设置Content-Disposition,使用HTTP响应头Content-disposition进行处理 3.先下载数据文件, ...

  10. linux(centos) 下搭建svn服务器

     1. 使用yum安装svn yum -y install subversion 安装完成之后,验证安装结果 此命令会全自动安装svn服务器相关服务和依赖,安装完成会自动停止命令运行 若需查看svn安 ...