#include <stdio.h>
#include <stdlib.h>
#define DG "%d\n"
//字符串数组
int main()
{
//长度问题============================
char arr[]= {"123"}; //定义的是一个字符串
char arr1[]= {'1','2','3'}; //一个字符数组
//两者其实是有区别的
//第一个相当于char arr[]={'1','2','3','\0'};
printf(DG,strlen(arr));//得到3//strlen是计算字串中字符的个数
printf(DG,sizeof(arr));//得到4
printf(DG,sizeof(arr1));//得到3
//关于strlen===========================
//从0号元素开始一直往后直到遇到第一个\0为止
char arr2[]= {'1','2','3','\0','1','2','3'};
printf(DG,strlen(arr2));//结果是3//虽然这里实际上有6个字符 但是只统计到前3个
//对于二维数组也是如此
char arr3[2][3]= {'1','2','3','\0','1','2'};
printf(DG,strlen(arr2));//结果是3
//定义与初始化问题===============================
char arr4[4];//ok
//char arr4[];//wrong
char arr5[2][3];
//char arr5[][3];//wrong//定义数组时如果没有初始化 必须指明数组的大小
char arr6[]= {"tyu"};
char arr7[][2][3]= {"123456qwert"};
//只有定义同时又初始化了 才能省去第一个[]
//对于arr7 为什么第一个[]可以省去呢?
//其实系统知道要对arr7如何分配空间
//123456qwert有11个字符 那么有12个空间(最后一个是\0)
//[][2][3]表明一个大组中有两个组 一个组中又有3个人
//这样计算下来就是有2个大组 所以第一维的数据时可以确定的
char arr8[4]= {'2','3'}; //定义一个size为4的数组//并对前两个元素初始化2和3
printf(DG,arr8[3]);//未手动初始化的部分为0
char arr9[4];
printf(DG,arr9[3]);//这里输出0//char数组有默认值0//因为char本身默认为0 即便是在函数内
char ch;
printf(DG,ch);//输出0
//int 数组和int本身一样 函数中的int和int数组是不具备默认值的
int num[6];
printf(DG,num[3]);//随机数
//strcpy和strcat问题===========================
char *t="123";//像这样定义的是字符指针同时又用=初始化的 存储123的这块区域是只读的
char *str="qwejj";
//strcpy(t,str);//会报XXXX内存只读的错误
//strcpy是重写字串1的空间内容 使这里的字符等同于字串2的字符
//strcpy中有这么一句while ((*strDest++=*strSrc++)!='\0');
//但是这样就ok
char *t2;
t2=(char *)malloc(50*sizeof(char));
strcpy(t2,"dfg");//ok
//如果觉得malloc语句很麻烦
char t3[20];
strcpy(t3,str);
char t4[]="dfghrthrt";
strcpy(t4,str);
printf(t4);//qwejj
//假如要被修改的空间定义的大小不够?
char t5[]="kl";
strcpy(t5,str);
printf(t5);//qwejj//正确输出
//strcat(t,str);//对于strcat也是如此// *t="123"; 这种定义属于常量
//同样报 内存只读的错误
strcat(t2,str);
strcat(t3,str);
strcat(t4,str);//ok
//gets puts================================
char *st;
st=(char *)malloc(50*sizeof(char));
gets(st);//gets(char *)//所以gets括号中可以使数组名也可以是指针名
//使用指针名前要记得分配空间
puts(st);//输出完一句话后会自动换行
char a[20];
gets(a);//在遇到回车符号结束本次输入//接收到的字符并不包括回车
printf(a);
puts(a);
char *st2;
st2=(char *)malloc(50*sizeof(char));
scanf("%s",st2);
printf(st2);//ok
char st3[20];
scanf("%s",st3);
puts(st3);//ok
}
原文链接: https://www.cnblogs.com/cart55free99/archive/2013/03/17/2964984.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/80977
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!