字符串定义:1.用双引号“ ”括起来的字符序列,可以是0个及以上的字符。2.字符串末尾有一个隐藏的 \0 作为结尾结束标志。
所以用“ ”包括的,或者有 \0 结束的字符数组 都是字符串
#include <stdio.h>
int main()
{
char str1[10];//定义长度为10的字符数组,没有初始化,打印 烫烫烫····
printf("%s", str1);
//可以一个一个的赋值
str1[0] = 'a';
str1[1] = 'b';
char str2[10] = { 'a','b','c','d','e' };//初始化一部分,后面都是0,相当于结尾有\0
char str3[10] = { "abcde" };
printf("%s", str1);//%s是输出字符串,会报错,因为str1不是字符串,没有用\0结束,也没有" "包括
printf("%s", str2); = printf("%s", str3);
return 0;
}
分类:
char str1[10]; //是字符数组,不是字符串
char str2[10] = "abcde"; //是字符数组,是字符串
char str3[] = "abcde"; //是字符数组,是字符串 长度为6
char str4[] = { 'a','b','c','d','e' }; //是字符数组,不是字符串 长度为5
char str5[10] = { 'a','b','c','d','e' }; //是字符数组,是字符串
对于str4这种 输出是字符数组,但不是字符串: int main()
{
char str[] = { 'a','b','c','d','e' };
printf("%s", str); //显然会发生错误
//把它作为一个数组来处理
for (int i = 0; i < sizeof(str) / sizeof(str[0]; i++)
{
putchar (str[i]);
}
return 0;
}
输出菱形的两个做法
int main()//输出菱形 1.当字符数组来处理
{
char c[5][5] = { {' ',' ','*',' ',' '}
,{' ','*',' ','*',' '}
字符数组的输入 循环
int main()
{
char c[6];
for (int i = 0; i < 6; i++)
{
scanf_s("%c", &c[i]);//getchar
}
for (int i = 0; i < 6; i++)
{
printf("%c", c[i]); //putchar
}
return 0;
}
字符串的输入
int main()
{
char c[6];
scanf_s("%s", &c);//此处&c=c
printf("%s", c);
return 0;
}
,{'*',' ',' ',' ','*'}
,{' ','*',' ','*',' '}
,{' ',' ','*',' ',' '}
};
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
putchar(c[i][j]);//printf("%c",c[i][j]);
}
putchar('\n');
}
return 0;
}
int main()//输出菱形 2.字符串
{
char c[5][6] = { " * "," * * ","* *"," * * "," * " };
for (int i = 0; i < 5; i++)
{
printf("%s\n", c[i]);
}
return 0;
}
比较两者的输入输出
字符数组的输入 循环
int main()
{
char c[6];
for (int i = 0; i < 6; i++)
{
scanf_s("%c", &c[i]);//getchar
}
for (int i = 0; i < 6; i++)
{
printf("%c", c[i]); //putchar
}
return 0;
}
字符串的输入
int main()
{
char c[6];
scanf_s("%s", &c);//此处&c=c
printf("%s", c);
return 0;
}
int main()
{
char str[5];
scanf_s("%s", str,5);//3为字符数组的最大容量,不能省
printf("%s\n", str);
return 0;
}