C 语言中如何声明和初始化字符串?

推荐答案

在C语言中,字符串可以通过字符数组或字符指针来声明和初始化。以下是两种常见的方式:

1. 使用字符数组

这种方式会在内存中分配足够的空间来存储字符串,并自动在末尾添加空字符 \0

2. 使用字符指针

这种方式将字符串常量存储在只读内存中,并将指针 str 指向该字符串的首地址。

本题详细解读

1. 使用字符数组

  • 声明与初始化char str[] = "Hello, World!";

    • 这里 str 是一个字符数组,编译器会根据字符串的长度自动分配足够的空间,并在末尾添加 \0 作为字符串的结束标志。
    • 数组的大小为字符串长度加1(用于存储 \0)。
  • 内存布局

    -- -------------------- ---- -------
    ------ - ---
    ------ - ---
    ------ - ---
    ------ - ---
    ------ - ---
    ------ - ---
    ------ - - -
    ------ - ---
    ------ - ---
    ------ - ---
    ------- - ---
    ------- - ---
    ------- - ---
    ------- - ----

2. 使用字符指针

  • 声明与初始化char *str = "Hello, World!";

    • 这里 str 是一个指向字符的指针,指向存储在只读内存中的字符串常量。
    • 字符串常量是不可修改的,尝试修改会导致未定义行为。
  • 内存布局

    • 字符串 "Hello, World!" 存储在只读内存区域,str 指向该字符串的首地址。
    • 字符串末尾同样会自动添加 \0

3. 注意事项

  • 字符数组:可以修改数组中的内容,因为数组是可写的。
  • 字符指针:指向的字符串常量是不可修改的,修改会导致运行时错误。

4. 示例代码

-- -------------------- ---- -------
-------- ---------

--- ------ -
    -- ------
    ---- ------ - ------- --------
    ------------- ------ ------

    -- ------
    ---- ----- - ------- --------
    ------------- ------ ------

    ------ --
-

5. 总结

  • 字符数组适合需要修改字符串内容的场景。
  • 字符指针适合指向不可修改的字符串常量。
纠错
反馈