C语言-字符串

目录

1.ACSCII表

 2.转义字符

换行符 \n:

制表符 \t:

双引号 \":

单引号 \':

反斜杠 \\:

3.字符串常量 

简单字符串常量:

包含转义字符的字符串常量:

使用转义字符表示双引号的字符串常量:

空字符串常量:

4.计算字符串长度 

5.字符串的内存管理

1.字符数组的大小:

2.字符串常量的内存管理:

3.字符串的动态内存分配:


 

1.ACSCII表

char ch = 'A';

ASCII编码中,字符'A'对应的ASCII码值是65。因此,该语句将整数值65赋给ch变量。在内存中,ch变量将占用1个字节,并存储ASCII码值65。这样,ch变量就表示了字符'A'。 

 2.转义字符

用反斜杠 \ 后跟特定字符来表示一些特殊字符

  1. 换行符 \n

    printf("Hello\nWorld");
    // 输出:
    // Hello
    // World
    
  2. 制表符 \t

    printf("Name:\tJohn\tAge:\t25");
    // 输出:
    // Name:   John    Age:    25
    
  3. 双引号 \"

    printf("She said, \"Hello!\"");
    // 输出:
    // She said, "Hello!"
    
  4. 单引号 \'

    char ch = '\'';
    printf("The character is: %c", ch);
    // 输出:
    // The character is: '
    
  5. 反斜杠 \\

    printf("This is a backslash: \\");
    // 输出:
    // This is a backslash: \

3.字符串常量 

字符串常量是由一系列字符组成的字符数组。字符串常量使用双引号 " 括起来。

  1. 简单字符串常量:

    "Hello, World!"
    
  2. 包含转义字符的字符串常量:

    "Line 1\nLine 2\tTabbed"
    // 输出:
    // Line 1
    // Line 2    Tabbed
    
  3. 使用转义字符表示双引号的字符串常量:

    "He said, \"Hello!\""
    // 输出:
    // He said, "Hello!"
    
  4. 空字符串常量:

    ""

在C语言中,字符串常量实际上是以空字符 '\0' 结尾的字符数组。例如,字符串常量 "Hello" 实际上是由字符 'H', 'e', 'l', 'l', 'o', '\0' 组成的字符数组。

需要注意的是,字符串常量是不可修改的,也就是说,你不能直接修改字符串常量中的字符。如果需要在程序中修改字符串,可以使用字符数组来存储字符串,并进行相应的操作。

在字符串中 0代表数字0、 \0 == 0 空字符、  '0'=48,一定要注意区分

4.计算字符串长度 

在C语言中,可以使用标准库函数strlen()来计算字符串的长度。strlen()函数的声明位于<string.h>头文件中。

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

int main() {
    char str[] = "Hello, World!";
    int length = strlen(str);
    printf("Length: %d\n", length);
    
    return 0;
}

输出:

Length: 13

5.字符串的内存管理

在C语言中,字符串是以字符数组的形式存储的。对于字符串的内存管理非常重要,以确保正确地分配、释放和使用内存。

1.字符数组的大小:

在定义字符数组来存储字符串之前,需要确保数组具有足够的大小来容纳字符串及其结尾的空字符\0。例如,如果要存储长度为N的字符串,字符数组的大小应为N+1。这是因为字符串以空字符结尾,并且需要额外的一个字符来存储空字符。

2.字符串常量的内存管理:

字符串常量是在程序的数据段中存储的,其内存是静态分配的。因此,不需要手动分配或释放内存来管理字符串常量。可以直接使用字符串常量来进行操作和访问。

3.字符串的动态内存分配:

如果需要在运行时动态地创建字符串,可以使用动态内存分配函数malloc()来分配足够的内存空间来存储字符串。分配的内存空间大小应为字符串长度加上一个额外的字符来存储空字符。例如:

char* str = (char*)malloc((length + 1) * sizeof(char));

需要注意的是,使用动态内存分配后,需要及时释放该内存空间,以避免内存泄漏。可以使用free()函数来释放动态分配的字符串内存。

free(str);

在释放内存之前,确保不再需要字符串,并且不再使用指向该字符串的指针。

  1. 字符串的复制和连接:在进行字符串的复制和连接操作时,需要确保目标字符数组具有足够的大小来容纳结果字符串。使用函数如strcpy()进行字符串复制和strcat()进行字符串连接时,需要注意目标字符数组的大小,避免溢出。

  2. 字符串的截取和修改:如果需要对字符串进行截取或修改,需要确保目标字符数组具有足够的大小来存储新的字符串。可以使用函数如strncpy()进行字符串截取和strcpy()进行字符串修改。同样,需要注意目标字符数组的大小,避免溢出。

总之,在处理字符串时,需要根据具体的需求来分配合适的内存空间,并在不再需要字符串时及时释放内存。同时,要注意防止内存溢出和野指针等问题,以确保字符串的内存管理安全和正确。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值