C语言字符串的一些使用注意事项

字符串输入问题

字符串输入函数:

  1. scanf(“%s”, str) 读入一串字符,以空格、回车、制表符或EOF为分隔符号,空格、回车、制表符或EOF不会被读入。分隔符号后的字符将作为下一输入项处理。
  2. gets(str) 读入一行字符,以回车或EOF为分隔符号,回车或EOF不会被读入。

不能使用赋值语句将一个字符串常量字符数组直接赋给一个字符数组字符数组名是一个地址常量,它不能改变值,正如数值型数组名不能被赋值一样。如下面两行都是不合法的:

str1 = "China";
str2 = str1;

赋值语句只能将一个字符赋给一个字符型变量字符数组元素。所以快捷的实现方法是使用strcpy函数将一个字符串复制到另一个字符数组中去。

字符串复制函数:strcpy(str1, str2)字符串str2复制到字符数组str1中去(包括’\0’)。 字符串str2的位置也可以是一个字符串常量。若str2有效字符位数 <= str1,则会部分或完全覆盖。若str2有效字符位数 > str1,则会报错。

字符串指定位复制函数:strncpy(str1, str2, n) 将字符串str2中前面n个字符复制到字符数组str1中去,取代str1中原有的最前面n个字符。


字符串长度问题

我们在对字符数组进行初始化时,从中括号里写不写数字来看有两种写法:

  1. 中括号写数字
    A. 数字与实际大小相等:系统不会在后面加'\0',字符个数等于数组大小等于数字。
     char str[6] = "abc123";
     char str[6] = {
          
          "abc123"};
     char str[6] = {
          
          'a', 'b', 'c', '1', '2', '3'};
    
    B. 数字与实际大小不等:系统会对未初始化元素置'\0',字符个数与数字不等,数组大小与数字相等。
    char str[8] = "abc123";                       //"abc123\0\0"
    char str[8] = {
          
          "abc123"};                     //{"abc123\0\0"}
    char str[8] = {
          
          'a', 'b', 'c', '1', '2', '3'}; //{'a','b','c','1','2','3','\0','\0'}
    
  2. 中括号不写数字:下面的前两种情况系统会自动在末尾加'\0',此时数组大小等于字符个数加一。第三种情况则不同,数组长度等于字符个数。
    char str[] = "abc123";       //"abc123\0"
    char str[] = {
          
           "abc123" };   //{"abc123\0"}
    
    char str[] = {
          
           'a', 'b', 'c', '1', '2', '3' };
    //故采用该方法定义时,我们一般手动加上'\0',如下:
    //char str[] = { 'a', 'b', 'c', '1', '2', '3', '\0' };
    

而我们一般认为的字符串长度,指的是字符数组的有效字符个数,所以不包括 ‘\0’。
故而使用sizeof()计算的字符数组长度是不能用来当做字符串长度的,所以我们通常使用strlen()函数strlen()函数通过'\0'来判断字符串结束位置,并返回字符串的有效字符个数,计算出字符串长度


其他字符串函数

字符串拼接函数:strcat(str1, str2)
把字符串str2拼接到字符串str1的后面(包括'\0'),结果放在str1字符数组中,故而必须保证str1数组大小满足要求。函数调用后得到的返回值是str1字符数组的地址

字符串比较函数:strcmp(str1, str2)
用来比较str1和str2,比较规则是将两个字符串自左至右逐个字符按ASCII码值大小比较,直到出现不同的字符或遇到'\0'为止。其实这个函数使用时我们更关心它是否相等的结果,如果全部字符相同,则认为两个字符串相等。反而并不关心谁比谁大,字符串比大小没什么意义。

  1. 若两个字符串相同,返回0。
  2. 若str1>str2,返回一个正整数。
  3. 若str1<str2,返回一个负整数。

字符串大小写转换函数

  1. strlwr():将字符串中的大写字母转换为小写字母。
  2. strupr():将字符串中的小写字母转换为大写字母。

猜你喜欢

转载自blog.csdn.net/jiang1126/article/details/125313912
今日推荐