2 mengxiang tianji mengxiang_tianji 于 2016.04.02 11:33 提问

字符串数组相关问题,正文有描述
1.char *str[] = { "Welcome", "to", "Fortemedia", "Nanjing" };
2.char **p = str + 1;
3.str[0] = (*p++)+2;
4.cout << str[0] << endl;
5.str[0] += 1 ;
6.cout << str[0] << endl;
7.str[0] += 1;
8.cout << str[0] << endl;

在VS2013中运行结果如下:

(空)
(空)
Fortemedia
请按任意键继续. . .

第三行str[0]指向o后面的'\0',输出为空,但是将指针加1后输出为什么还是空?再次加1才指向下一个字符串首地址。

2个回答

cxsmarkchan
cxsmarkchan   2016.04.02 12:09
已采纳

你认为这些字符串在内存中的存放格式如下:"Welcome\0to\0Fortemedia\0Nanjing\0"

这个想法并不正确,这些字符串仅仅是被存放在了一块叫做“常量区”的地方,但C++没有要求它们首尾相连。所以,to后面并不一定紧跟Fortemedia,这和编译器有关。

彩蛋:

char *str[] = {"Welcome", "to", "Welcome", "Nanjing"};

把str的定义改成这样,输出的时候也许会有惊喜……(编译器会把两个Welcome放到同一个地址)

mengxiang_tianji
mengxiang_tianji 回复cxsmarkchan: 好的
2 年多之前 回复
cxsmarkchan
cxsmarkchan 回复mengxiang_tianji: 个人建议少用这种复杂的指针运算,尤其是从一个字符串跳到另一个字符串,因为这要求你对程序数据在内存中的存放方式非常了解。一般来说我们用数组/字符串指针,都是局限在这个数组/字符串内部。
2 年多之前 回复
mengxiang_tianji
mengxiang_tianji 谢谢谢谢
2 年多之前 回复
zanfeng
zanfeng   2016.04.02 11:58

void Test()
{
char *str[] = { "Welcome", "to", "Fortemedia", "Nanjing" };

cout << str[0] << endl;

cout << str[1] << endl;

cout << str[2] << endl;

cout << str[3] << endl;
}

mengxiang_tianji
mengxiang_tianji 什么意思?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
java io相关类的操作(system,scanner,printwriter)
package io; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; //System类对IO的支持 public class A { pu
【Python】提取网页正文内容的相关模块与技术
【Python】提取网页正文内容的相关模块与技术   1、正文抽取地址   https://github.com/buriy/python-readability   【安装】   pip install readability-lxml   【测试】   python -m readability.readability -u   http://www.
链表相关算法总结
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。因为在编写程序时,经常用来评估代码能力--包括代码规范性、完整性、鲁棒性。 本文按照论文按照题目进行距离总结,题目列表如下: 1、环形链表插值问题 2、当前访问节点删除问题 3、链表中荷兰国旗问题 4、**单链表的k区间逆序问题 5、复杂结构链表的复制 6、单链表判断是否有环
银行家算法
描述了银行家算法的相关问题,里面包括了基本的问题,有算法的实现,算法的介绍等等
C++编程问题合集(持续更新中...)
C++编程中遇到很多奇奇怪怪的问题,开个博文记录一下,以后遇到相同问题可以直接查阅(按错误号排序)。函数定义时编译器报错存在正文时不允许未命名的原型参数这个造成的原因是C语言中没有引用,解决方法是讲后缀名.c改成.cpperror C2065: “xxxx”: 未声明的标识符解决方法:http://blog.csdn.net/sinat_35821976/article/details/77849...
string类、字符串数组相关问题
1、如何将一个文本文件拷贝到一个字符串中? ifstream inputFile("interestingData.txt"); string fileData((istream_iterator(inputFile)),istream_iterator()); 这虽然是一个可行的方法,但是不建议使用,因为这样会把文件中所有的空格忽略 建议使用: ifstream inputFi
C++ 字符串类,字符串变量与字符串数组
在C语言中,应用字符串需要定义字符数组,字符串需要存放在字符数组中。然后利用各种字符串操作函数对其操作。 http://blog.csdn.net/chaipp0607/article/details/56676791但是这种方式存在一些弊端,比如字符数组的大小是固定的,在进行字符连接或字符复制时,需要计算字符串与字符数组的长度,否则就可能发生一部分字符超出数组范围。为此,C++提供了一种新的数据
java mail 带附件 正文有图片和文字
package com.chinasofti.email.utils; import java.util.Date; import java.util.Enumeration; import java.util.Properties; import java.util.Vector; import javax.activation.*; import javax.mail.Au
关于程序可移植性的问题
《linux程序设计》最后一部分提到了关于程序的可移植性问题,这里做一下总结。             可移植性是针对编译器、操作系统和硬件三个层次来说的。一般如果一个工程有特定依赖于某种系统的代码,则应该设计为独立的部分。              1.从程序的角度看,主要是注意limits.h里面设置的最大值。              2. 从硬件的角度看,主要是注意数据长度,字节顺
测试相关文档描述
0、测试规范 通过《系统需求》,确定可测试性的需求。 制定《测试计划》 编写《测试方案》 编写《测试规程》(测试用例) 编写《测试报告》 1、测试计划 及早编写逐步优化 测试总体安排思路: 描述按照项目的质量目标,如何安排项目各个阶段的测试活动,是否有所侧重。 一般情况下,各类测试活动需要描述以下内容: 单元测试:特定模块是否进行单元测试的划分标准,代码覆