字符串定义方式及输出
#include <stdio.h>
#include <stdlib.h>
int main()
{
//字符串定义方式1
int i;
char str[5] = {'a','b','c','d','e'};
for(i=0;i<sizeof(str)/sizeof(str[0]);i++)
{
printf("%c ",str[i]);
}
putchar('\n');
//字符串定义方式2
char str2[5] = "abcde";
for(i=0;i<sizeof(str2)/sizeof(str2[0]);i++)
{
printf("%c ",str2[i]);
}
putchar('\n');
//字符串定义方式3
char str3[] = "abcdefghijklmnopq";//定义时可以省略数组长度,系统会自动根据初始值确定数组长度
for(i=0;i<sizeof(str3)/sizeof(str3[0]);i++)
{
printf("%c ",str3[i]);
}
putchar('\n');
char *pstr = "hello gang gang";//指针方式如果操作不当易造成段错误
printf("%s",pstr);
system("pause");
return 0;
}
字符串在内存中的存储方式
#include <stdio.h>
#include <stdlib.h>
//字符串的存储方式
int main()
{
//连续的空间,整个数组的大小是 元素个数x元素大小
int a[3] = {1,2,3};
printf("a数组的大小:%d\n",sizeof(a));
printf("a数组元素的大小:%d\n",sizeof(a[0]));
printf("a2数组元素的大小:%d\n",sizeof(int));
printf("a数组元素的个数:%d\n",sizeof(a)/sizeof(a[0]));
putchar('\n');
//连续的空间,整个数组的大小是 元素个数x元素大小
char a2[3] = {'a','b','c'};
printf("a2数组的大小:%d\n",sizeof(a2));
printf("a2数组元素的大小:%d\n",sizeof(a2[0]));
printf("a2数组元素的大小:%d\n",sizeof(char));
printf("a2数组元素的个数:%d\n",sizeof(a2)/sizeof(a2[0]));
putchar('\n');
//连续的空间,整个数组的大小是 元素个数x元素大小
char a3[3] = "abc";
printf("a2数组的大小:%d\n",sizeof(a3));
printf("a2数组元素的大小:%d\n",sizeof(a3[0]));
printf("a2数组元素的大小:%d\n",sizeof(char));
printf("a2数组元素的个数:%d\n",sizeof(a3)/sizeof(a3[0]));
putchar('\n');
//连续的空间,整个数组的大小是 元素个数x元素大小
char a4[] = "abc";
printf("a2数组的大小:%d\n",sizeof(a4));
printf("a2数组元素的大小:%d\n",sizeof(a4[0]));
printf("a2数组元素的大小:%d\n",sizeof(char));
printf("a2数组元素的个数:%d\n",sizeof(a4)/sizeof(a4[0]));
system("pause");
return 0;
}
结果:
我们发现,整型数组的大小是没有变化的,最后一个字符串的定义方式,结果是4,多了一个 \0 ,\0是字符串的结束标志。
在输出字符串的时候,若果没有碰到’\0’,就不会停止输出,否则停止输出。
我们做个测试:
int i = 0;
while( a4[i] != '\0')
{
printf("Sc" , a4[i]);
i++:
}
结果同样也会是abc.
总之一句话:宇符串在内存中,除了有效字符以外,还会自动在后面补一个’\0’,作为字符串的结束标识。
计算字符串中字符的个数
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[] = {1,2,3};
printf("数组a的元素个数为:%d\n",sizeof(a)/sizeof(a[0]));
char a2[128] = "hello";
printf("数组a2的元素个数为:%d\n",sizeof(a2)/sizeof(a2[0]));
printf("a2字符串的真实字符个数为:%d\n",strlen(a2));
system("pause");
return 0;
}
根据结果可知,sizeof不能能计算字符串中有效字符个数。可用strlen,其在计算字符串大小时遇到‘\0’就结束计数。