最近因为工作需要开始重新学c语言,越学越发现c语言深不可测,当初用python轻轻松松处理的一些数据,但是c语言写起来却异常的复杂,这个板块就记录一下我的c语言复习之路
字符串是连续的字符序列,最后以空字符’\0’作为终止符。一个字符串的长度指所有字符的数量,但不包括终止符。在 C 语言中,没有字符串类型,自然也就没有运算符以字符串为操作数。
// 方式一:必须指定第二维的大小,且应大于等于数组最长字符串的长度
char str_arr1[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
// 方式二 用指针的方式
char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
字符串数组
和char *
表示的字符串有什么区别呢?它们最根本的区别是在内存中的存储区域不一样,字符数组存储在全局数据区或栈区,第二种形式的字符串存储在常量区。全局数据区和栈区的字符串(也包括其他数据)有读取和写入的权限,而常量区的字符串(也包括其他数据)只有读取权限,没有写入权限。
char str_arr[][100];
int i, j, ch
for (i = 0; i < sizeof(str_arr)/sizeof(str_arr[0]); i++)
{
printf("请输入%d句话:", i+1);
for (j = 0; (ch = getchar()) != '\n'; j++)
{
slogan[i][j] = ch;
}
slogan[i][j] = '\0';
}
char *num[5]={""};
for(int i = 0;i < 5;i++)
{
num[i]=(char*)malloc(20);
scanf("%s",num[i]);
}
for(int i = 0; i < 5; i++)
{
printf("%s\n", num[i]);
}
#include
#include
int main()
{
// 方式一:必须指定第二维的大小,且应大于等于数组最长字符串的长度
char str_arr1[][10] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
printf("方式一遍历:");
printf("%d", sizeof(str_arr1));
for(int i = 0; i < sizeof(str_arr1)/sizeof(str_arr1[0]); i++)
{
printf("%s ", str_arr1[i]);
}
printf("\n");
// 方式二
char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"};
printf("方式二遍历:");
for(int i = 0; i < sizeof(str_arr2)/sizeof(str_arr2[0]); i++)
{
printf("%s ", str_arr1[i]);
}
return 0;
}
遍历比较简单,就数组取值就行,但我还在一个博客上看到另外一种方式,即在字符串数组最后去赋值一个NULL,代码如下
char *str_arr2[] = {"Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday", NULL};
char **str = str_arr2;
while (*str != NULL)
{
printf("%s\n", *str++);
}
可以看到c语言的字符串数组里面的东西还是非常多的,以上就是字符串数组的一些理解和记录
参考文章:
https://zhuanlan.zhihu.com/p/377633216
http://c.biancheng.net/view/1829.html