第三章 3.5.4节练习

练习3.37

下面的程序是何含义,程序的输出结果是什么?

const char ca[] = {'h', 'e', 'l', 'l', 'o'};

const char *cp = ca;

while(*cp){

  cout << *cp << endl;

  ++cp;

}

解答:

在答应出hello之后,输出若干乱码。

为了测试字符串越界访问之后会产生什么样的结果(?)


练习3.38

在本节中我们提到,将两个指针相加不但非法,而且也没有什么意义。请问为什么两个指针相加没什么意义?

解答:

两个指针能相加的话,得到的地址没有办法使用。

因为这个地址不清楚是一个什么样的地址。


练习3.39

编写一段程序,比较两个string对象。再编写一段程序,比较两个C风格字符串的内容。

解答:

string对象可以直接进行==操作。

#include <iostream>
#include <vector>
#include <iterator>

using namespace std;

int main(){
	const char *a = "hello";
	const char *b = "hello";

	if (strlen(a) != strlen(b)){
		cout << "not equal" << endl;
		return -1;
	}
	for (; *a != '\0' && *b != '\0'; ++a, ++b){
		if (*a != *b){
			cout << "not equal" << endl;
			return -1;
		}
	}
	cout << "equal" << endl;
	return 0;
}

练习3.40

编写一段程序,定义两个字符数组并用字符串字面值初始化它们;接着在定义一个字符数组存放前两个数组链接后的结果。使用strcpy和strcat把起那两个数组的内容拷贝到第三个数组中。

解答:

这里定义四个数组吧,这样好理解一些。

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <vector>
#include <cstring>

using namespace std;

int main(){
	const char *a = "hello";
	const char *b = "world";
	char c[100];
	char res[1000];

	strcpy(c, a);
	strcat(c, b);

	strcpy(res, c);

	cout << c << endl;
	cout << res << endl;
}
第一行的宏定义需要在VS里面添加,应为strcpy是个线程不安全的函数,VS会提示你使用strcpy_s。

当加上这个宏,VS就不会再报错了。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值