字符串
1. C语言 - 字符数组/字符串/字符指
- 字符数组包括“纯粹的字符数组”,也包括“字符串”,注意区分字符数组和字符串。
字符串 - 含'\0'的字符数组。
字符串常量 - “hello”
- 注意“字符数组”与“字符串”的差别:
strlen等操作基于字符串为处理对象,以'\0'为结束标识,如果以不含结束标识的字符数组为处理对象,会造成“内存访问冲突”等问题;
- 字符串比较:不能直接比较,需要借助相关函数。
-
char* strcpy(char* strDest, const char* strSource) char* strcmp(const char* string1, const char* string2) // string1 == string2 返回0,string1>string2 返回值>0
- strcpy()
-
1 char* strcpy(char* strDest, const char* strSource) 2 { 3 /*注重检查指针的有效性,提高代码的鲁棒性 4 如果利用 !strDest判断会引入隐式类型转换*/ 5 assert( strDest != NULL && strSource != NULL); 6 7 char* ret = strDest;// 8 9 while( (*strDest++ = *strSource++) != '\0');//不采用索引遍历字符串,直接通过指针递增访问,但注意循环结束后指针已经指向字符串的末尾 10 return ret;//为何返回char*, 目的是支持链式表达式 11 12 }
- sizeof()/strlen()
1 char arr_char_1[] ={'a','b','\0','c','d'}; 2 char arr_char_2[]="hello"; 3 char *p="hello"; 4 5 cout<<sizeof(arr_char_1[])<<endl; //5 6 cout<<strlen(arr_char_1[])<<endl; //2 7 8 cout<<sizeof(arr_char_2[])<<endl; //6 9 cout<<strlen(arr_char_2[])<<endl; //5 10 11 cout<<sizeof(p)<<endl; //4 12 cout<<strlen(p)<<endl; //5
2.MY_OJ_1 字符串转换
- 用索引遍历字符串
-
func(char* strInput) { ........... while( strInput[i++] != '\0'); //用指针遍历 *strInput++ != '\0' }
- '\0'
组装字符串时结尾勿忘'\0';
声明字符数组时预留位置给'\0';
- 'a' - 'A' ==32