C语言字符串字面量

231 2025-02-21 09:23

const char *link_tag[3] = {"i2s", "raw"}; link_tag[1] = "filter"; link_tag[2] = "raw"; linked_num = 3; 如何打印tag
 
在C语言中,可以通过循环遍历数组并使用printf函数来打印数组中的每个字符串。以下是实现打印link_tag数组内容的代码示例:

c复制

#include <stdio.h>

int main() {
    const char *link_tag[3] = {"i2s", "raw"};  // 初始化数组
    link_tag[1] = "filter";  // 修改数组中的元素
    link_tag[2] = "raw";     // 修改数组中的元素
    int linked_num = 3;      // 数组的有效元素个数

    // 打印数组中的每个字符串
    for (int i = 0; i < linked_num; i++) {
        printf("link_tag[%d] = %s\n", i, link_tag[i]);
    }

    return 0;
}

输出结果:

运行上述代码后,输出结果如下:

复制

link_tag[0] = i2s
link_tag[1] = filter
link_tag[2] = raw

说明:

  1. const char *link_tag[3]定义了一个包含3个字符串指针的数组。
  2. 通过link_tag[1] = "filter"link_tag[2] = "raw",修改了数组的第二个和第三个元素。
  3. 使用printf函数打印每个元素的索引和对应的字符串值。
  4. linked_num表示数组中有效元素的个数,用于控制循环的次数。
如果你有其他需求,可以进一步调整代码。

 

这种方式不用申请字符串固定空间吗?

 

在你的代码中,link_tag是一个指向字符串字面量(string literals)的指针数组。字符串字面量在C语言中是存储在程序的只读内存区域中的,它们不需要手动申请空间,因为它们的存储空间是由编译器自动分配的。因此,你不需要为这些字符串字面量申请额外的空间。

关键点解释:

  1. 字符串字面量的存储
    • 字符串字面量(如"i2s""filter""raw")是存储在程序的只读内存段中的。这些字符串的存储空间由编译器在编译时分配,程序运行时不能修改这些字符串的内容。
    • 例如:

      c复制

      const char *link_tag[3] = {"i2s", "filter", "raw"};
      这里的"i2s""filter""raw"是字符串字面量,它们的存储空间由编译器管理。
  2. 指针数组的存储
    • link_tag是一个指针数组,它存储的是指向字符串字面量的指针。数组本身的空间是在栈上分配的(如果它是局部变量),或者在全局数据段分配的(如果它是全局变量)。
    • 例如:

      c复制

      const char *link_tag[3];
      这里link_tag数组本身占用的空间是固定的,大小为3 * sizeof(const char*)(通常是12字节,假设指针大小为4字节)。
  3. 不需要手动申请空间
    • 因为字符串字面量的存储空间由编译器分配,且link_tag数组本身的空间也是自动分配的,所以你不需要手动申请空间。
    • 只有当你需要存储可修改的字符串时(例如使用char数组),才需要考虑手动分配空间(如使用malloc)。

示例代码:

c复制

#include <stdio.h>

int main() {
    const char *link_tag[3] = {"i2s", "raw"};  // 初始化数组
    link_tag[1] = "filter";  // 修改数组中的指针,指向另一个字符串字面量
    link_tag[2] = "raw";     // 修改数组中的指针

    for (int i = 0; i < 3; i++) {
        printf("link_tag[%d] = %s\n", i, link_tag[i]);
    }

    return 0;
}

输出:

复制

link_tag[0] = i2s
link_tag[1] = filter
link_tag[2] = raw

总结:

  • 字符串字面量的存储空间由编译器分配,不需要手动申请。
  • link_tag数组存储的是指针,指针数组的空间也是自动分配的。
  • 如果你需要存储可修改的字符串内容(例如用户输入),则需要使用动态分配(如char *str = malloc(size))或固定大小的字符数组(如char str[100])。

 

 

全部评论

·