C中的字符串参数是否动态分配?

Pau*_*l B 3 c string

假设我有一个具有以下规范的函数:

void example(char* str)
Run Code Online (Sandbox Code Playgroud)

如果我传入一个字符串参数,例如:

example("testing");
Run Code Online (Sandbox Code Playgroud)

是"测试"在堆上动态分配的价值,所以我就可以说取得了函数调用"榜样"被破坏的范围后使用它(和需要稍后释放它),或者是本地堆栈上的变量,所以我需要使用malloc创建一个新的字符串,并将值存储在那里,如果我希望它继续存在,比如一个hashmap?

谢谢.

Jay*_*Jay 8

当您"testing"在程序中编写时,它将被编译为字符串文字,并且在编译期间将分配它的空间.当你得到一个指向它的指针时,它是指向内存中该位置的指针.你不需要分配它malloc(),你也不应该分配free()它.但是尝试修改其内容也不是一个好主意,因为编译器可能会将它放在只读区域(也就是说,它被编译为常量) - 例如,以下程序在我的Linux桌面上崩溃:

#include <stdio.h>
int main() {
    char *a = "abc\n";
    a[0]='X';
    printf(a);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)