实现字符串与字符数组的连接
#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;
}