字符串与字符数组的关系

实现字符串与字符数组的连接

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{

#if 0
	char name[10] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g' };

	for (int i = 0; i < 10; i++)
	{
		*(name + i) = 'm'; //数组可以改变内容
		printf("%c", *(name + i));
	}

	printf("\n===================================\n");

	char* pname = "wangguilin";//将wangguilin存储到data的只读数据段 
	                           //只是编译了首地址 将首地址赋值给了pname

	for (int i = 0; *(pname + i) != '\0'; i++) //循环条件为判断\0
	{
		//*(pname+i)=100; 不能改变只读的内容
		printf("%c", *(pname + i));
	}

	printf("-----------------------------------\n");

	printf("name=%d\n", sizeof(name));  //打印长度大小

	printf("name=%p\n", name); //打印name数组的首地址

	printf("name+1=%p\n", name + 1); //打印数组中第二个元素的首地址


	printf("\"wangguilin\"=%d\n", sizeof("wangguilin")); //打印字符串的长度大小

	printf("\"wangguilin\"=%p\n", "wangguilin"); 

	printf("\"wangguilin\"+1=%p\n", "wangguilin" + 1);

#endif
	//字符串本身是以常量存在,但是,有这样的需要,去改变字符串的内容
	//此时需要把字符串常量,放到字符数组中去(相当于赋值一个副本)
	//字符串常量的性质和字符数组的性质完全吻合 所以就给=两边找到切合点

	char name[100] = "wangguilin";  //字符串赋值字符数组 为了进行操作字符串

	//俩种打印方式都可以,name和"wangguilin"都是常量字符指针
	printf("%s\n", name); printf("%s\n", "wangguilin");
	//只有name存放的是字符串时(有'\0')可以%s打印,是字符数组时(没'\0')
	//不能用%s打印,用for循环打印

	name[6] = 'Y'; //可以对数组进行更改 但是常量区的"wangguilin"不能更改

	printf("%c\n", name[6]); printf("%c\n", "wangguilin"[6]);
	printf("%s\n", name); printf("%s\n", "wangguilin");
	return 0;
}


在字符数组中手动输入字符串

#include "stdafx.h"

int _tmain(int argc, _TCHAR* argv[])
{
	//要实现等价交换,字符数组的大小要比字符串的大小至少大1个

	char name[] = "china"; //默认的会把字符串的'\0'拷贝到数组中去

	//printf("sizeof(name)=%d   sizeof(\"china\")=%d\n", sizeof(name), sizeof("china"));

	char buf[10] ; //不要越界写入,最多写入9个,保证后面有个'\0' scanf 自动加入

	//scanf("%s", buf);     //输入的字符中如果有空格的话 打印时候只显示空格之前的字符串
	//printf("%s\n", buf);  //注意字符数组不能这样打印 此时打印仅为scanf中输入的字符串 
	                        //字符数组打印需要用for循环

	printf("请输入字符串(不超过9个):");
	gets(buf);  //可以把空格读出来,也会自动加入'\0'
	puts(buf);  //在输出结束后自动加\n换行
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值