在C中返回带有const char*的字符串

Mar*_*kus 5 c string

我试图理解为什么以下字符串传递适用于我的错误字符串.我从一个更大的来源我做了这个例子.

我的问题是; 为什么我不必为包含我的错误消息的char数组专门分配内存?我原本以为我需要为字符串malloc一些内存并使用err指针来指示这个内存的开始.

const char *是因为它是a 或者是因为我正在打印到stderr吗?

我可能写错了这个问题,这就是为什么搜索没有帮助我理解这一点.

const char * my_function(int a)
{
     if (a != 1)
         return "a doesn't equal 1!"
     else
         return NULL;

}

int main(int a)
{
    const char *err;
    err = my_function(a);
    if (err)
         fprintf(stderr, "Message = %s\n",err);
         return 1;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Lun*_*din 8

所有字符串文字都在编译时分配.程序启动时,它们已驻留在程序存储器的只读部分; 它们不是在运行时分配的.您可以将它们视为常量字符数组.和任何const变量一样,它们在整个程序执行期间仍然有效.

  • "所有字符串文字都在编译时分配." 这个措辞真的对吗?我相信在编译时没有分配任何内容.如果在编译时分配它何时被解除分配呢? (2认同)