learning_notes_string
- strlen 运用所出现的问题
- strlen 返回值是 size_t,它是一个无符号整型
if(strlen(x) >= strlen(y)) 和 if(strlen(x)-strlen(y) >= 0)
其实是不等价的,原因是strlen返回值是一个无符号类型,strlen(x)-strlen(y)也是一个无符号类型,而无符号数绝不会是一个负值。
- 当然这个问题也是可以解决的,就是把strlen的返回值强制转换为int类型
- strlen所计算的字符串长度是不计入’\0’或NUL值,思考strlen和sizeof的区别
-
如何理解长度受限制字符串和长度不受限字符串?
-
字符串的复制
- string.h 头文件中的 strcpy用于字符串的复制
- 字符串复制操作前必须保证目标字符串的空间足以容纳需要复制的字符串
- 新字符串以NUL结尾,旧字符串的后几位将丢失或者删除
- 理解strncpy的意义,考虑如下代码段
char buffer[BSIZER];
...
strncpy(buffer, name, BSIZE);
buffer[BSIZE-1] = '\0';
- 上述代码段可以保证 strncpy操作后所得字符串是以NUL结尾
- 字符串的连接
- string.h 头文件中的 strcat用于字符串的连接
- 同样的,字符串连接操作前必须保证目标字符串的空间足以容纳连接后的字符串
- 理解strncat字符串
- 字符串的比较
- string.h 头文件中的 strcmp用于字符串的比较
- 理解“词典比较”
- 字符串相等:返回0; 大于:返回一个大于0的值; 小于:返回一个小于0的值
- 理解strncmp字符串
- 字符串查找
- strchr 和 strrchr 函数查找字符出现第一次和最后一次的位置
- strpbrk 函数查找一组字符中第一次出现的位置
- strstr 函数查找字符子串第一次出现的位置
- C 库函数 size_t strspn(const char *str1, const char *str2) 检索字符串 str1 中第一个不在字符串 str2 中出现的字符下标, strcspn和strspn正好相反
- C 库函数 char *strtok(char *str, const char *delim) 分解字符串 str 为一组字符串,delim 为分隔符。用法如下:
/* 获取第一个子字符串 */
token = strtok(str, s);
/* 继续获取其他的子字符串 */
while( token != NULL ) {
printf( "%s\n", token );
token = strtok(NULL, s);
}
for(token=strtok(str,s); token!=NULL; token=strtok(NULL,s)){
printf("%s\n", token);
}
- C 库函数 char *strerror(int errnum) 从内部数组中搜索错误号 errnum,并返回一个指向错误消息字符串的指针。strerror 生成的错误字符串取决于开发平台和编译器。用法如下:
#include
#include
#include
int main ()
{
FILE *fp;
fp = fopen("file.txt","r");
if( fp == NULL )
{
printf("Error: %s\n", strerror(errno));
}
return(0);
}
结果显示:Error: No such file or directory