【C】30.C语言中的字符串

C中字符串概念

字符串 是有序字符的集合(是程序中基本元素之一)

C语言中没有字符串的概念

C语言中通过特殊的字符数组模拟字符串(特殊的字符数组是有 \0 作为结尾)

C语言中字符串都是以 \0 结尾的的字符数组

'\0' 介绍:

'\0'是 ASCII 码表中的第 0 个字符,英文称为 NUL,中文称为“空字符”。该字符既不能显示,也没有控制功能,输出该字符不会有任何效果,它在C语言中唯一的作用就是作为字符串结束标志。

特殊的字面量 就是 字符串字面量。 本质为字符数组,而且是无名数组(数组里面的内容为字符)

问题:判断那些是字符串的定义?

char ca[] = {'H', 'e', 'l', 'l', 'o'}; 
char sa[] = {'H', 'e', 'l', 'l', 'o', '\0'};
char ss[] = "Hello world!";
char* str = "Hello world!";

分析:

char ca[] = {'H', 'e', 'l', 'l', 'o'};

ca是字符数组,不是字符串,因为末尾没有 ‘\0’

char sa[] = {'W', 'o', 'r', 'l', 'd', '\0'};

sa是字符串,末尾有 ‘\0’

Char ss[] = “Helloworld!” //“Helloworld!”为字符串字面量

这个一开始认为是用一个字符串字面量(本质是字符数组)去初始化ss字符数组,这个是C语言中特列的地方,可以用字符串字面量来初始化字符数组,被初始化的数组 是包涵每一个字符,并且编译后自动添加'\0',编译器编译的时候会在字符串字面量后面添加 '\0'。

char* str = "Hello world!";

用一个字符指针去指向字符串(本质为字符数组)是合法的

#include <stdio.h>

int main()
{
    char ca[] = {'H', 'e', 'l', 'l', 'o'};
    char sa[] = {'W', 'o', 'r', 'l', 'd', '\0'};
    char ss[] = "Hello world!";
    char* str = "Hello world!";
    
    printf("%s\n", ca);
    printf("%s\n", sa);
    printf("%s\n", ss);
    printf("%s\n", str);
    
    return 0;
}

运行结果:

如果字符串处理函数传进去的参数是字符数值会有问题。上面 ca 就是这个问题。

“Helloworld” 是一个无名数组

#include <stdio.h>

int main()
{
    // 理解本质,下面这些操作就容易理解
    char b = "abc"[0];
    char c = *("123" + 1);
    char t = *"";
    
    printf("%c\n", b);
    printf("%c\n", c);
    printf("%d\n", t);
    
    printf("%s\n", "Hello");
    printf("%p\n", "World");
    
    return 0;
}

字符串长度

#include <stdio.h>
#include <string.h>

int main()
{
    char s[] = "Hello\0world";
    int i = 0;
    
    for(i=0; i<sizeof(s)/sizeof(char); i++)
    {
        printf("%c\n", s[i]); // 打印字符
    }
    
    printf("%s\n", s);  // 打印字符串

    printf( "%d\n", strlen(s) );
    printf( "%d\n", strlen("123") );
 
    
    return 0;
}

运行结果:

补充案列:

1.留意一个坑,字符数组只有在定义时才能将整个字符串一次性地赋值给它,一旦定义完了,就只能一个字符一个字符地赋值了。

char str[7];
str = "abc123";  //错误
//正确
str[0] = 'a'; str[1] = 'b'; str[2] = 'c';
str[3] = '1'; str[4] = '2'; str[5] = '3';

2.字符串和常量指针的一些问题

#include <stdio.h>
int main(){
    char *str = "Hello World!";   // 常量指针,指向常量的指针,不能改变内容
    str = "I love C!";  //正确,本身地址可以改变
    str[3] = 'P';  //错误
    return 0;
}

小结:

C语言中通过字符数组模拟字符串,字符串中使用 '\0'  作为结束符。

字符串的本质为字符数组(无名数组)。

字符串相关的函数都依赖于结束符  ‘\0’。

发布了84 篇原创文章 · 获赞 0 · 访问量 770

猜你喜欢

转载自blog.csdn.net/zhabin0607/article/details/103165756