#include<stdio.h>
#include<string.h>
#define MSG "what \'s your name?"
#define LIM 5
#define MAX 10
int main()
{
//定义字符串
//程序开始运行时
char str1[]=MSG; //初始化数组把字符串整个拷贝到数组
char *pstr=MSG; //初始化指针把字符串的地址拷贝给pstr
printf("%p\n",MSG);
printf("pstr=%s\t&pstr=%p\t*pstr=%c\n",pstr,pstr,*pstr);
printf("str1=%s\t&str1=%p\t*str1=%c\n",str1,str1,*str1);
char str3[]="Hello world!";
printf("%lu\n",sizeof(str3));
char str2[13]={'H','e','l','l','o',' ','w','o','r','l','d','\0'};
printf("%lu\n",sizeof(str2));
char str4[12]={'H','e','l','l','o',' ','w','o','r','l','d'}; //没有空字符,就不是一个字符串
printf("%lu\n",sizeof(str4));
const char *pstr2="Hello world!"; //程序运行时把字符串的地址拷贝给pstr,使用const可以防止通过指针修改字符串
printf("%lu\n",sizeof(pstr2));
printf("%p\n","Hello world!");
printf("pstr2=%s\t&pstr2=%p\t*pstr2=%c\n",pstr2,pstr2,*pstr2);
printf("str3=%s\t&str3=%p\t*str3=%c\n",str3,str3,*str3);
//字符指针数组:不修改时使用,
const char *parr1[LIM]={
{"红色"},
{"黄色"},
{"蓝色"},
{"绿色"},
{"黄色"}
};
//字符串数组:修改时使用
char arr1[LIM][MAX]={
{"红色"},
{"黄色"},
{"蓝色"},
{"绿色"},
{"黄色"}
};
printf("sizeof(parr1)=%lu\n",sizeof parr1);
for(int i=0;i<LIM;i++)
{
printf("%s\n",parr1[i]);
}
printf("sizeof(arr1)=%lu\n",sizeof arr1);
for(int i=0;i<LIM;i++)
{
printf("%s\n",arr1[i]);
}
//字符串输入
char *st1; //不知道st1指向何地方
//scanf("%s",st1); //不推荐,st1可能会擦除程序中的数据或程序块
char ast[20];
//调用输入函数进行输入
//scanf("%s",ast); //遇空白符结束,丢弃空白字符,添加'\0'
gets(ast); //遇到换行符结束,丢弃换行字符,添加'\0'
puts(ast); //输出字符串,并在输出字符串末尾添加一个换行符
/*无法检查字符数组是否能装下字符串,如果字符串过长,会导致缓冲区
溢出,即多余的字符超出了指定的空间,C11舍弃了gets()函数,使用gets_s()函数代替它
(编译器不一定支持它),此外还可以使用fgets()和fputs()函数代替gets()和puts()
*/
fgets(ast,20,stdin); //1.第二个参数指定了读入字符的最大数量(n-1);2.第三个参数指定要读入的文件,stdin 标准输入(如果从键盘输入,使用参数stdin)
/*注意:fgets()函数读取到文件结尾、换行符或指定长度结束,(如果读到换行符,不丢弃换行符,并把换行符一起存入ast中。 )
假如输入的是Hello world![Enter]
存入ast中的是 Hello world!\n\0
*/
puts(ast);
puts("*****************");
fputs(ast,stdout); //第二个参数指定要写入的文件,(如果要显示在计算机显示器上,使用参数stdout(标准输出))
/*注意:fputs()并不会在输出字符串后添加一个换行符
*/
puts("*******************");
/*如果读到最大字符数都没有读到换行符,会把目标数组中的首字符设置为空字符,读取并丢弃随后的
输入直到读取到换行符或文件结尾,然后返回空指针.接着,调用依赖实现的"处理函数"(或你选择的其
他函数),可能会终止或退出程序*/
gets_s(ast,n);
return 0;
}
字符串的输入输出
最新推荐文章于 2022-05-26 22:55:35 发布