函数中的常量字符串-它们保存在哪里



我有:

void func()
{
    char *s;
    strcpy(s,"bla bla");
}

"bla-bla"存放在什么地方?即使我没有定义它,它也被认为是"constchar*"吗??

字符串文字是无名称的数组对象,存储在静态内存中,即存储全局变量的同一内存中。字符串文字永远存在:它们在程序开始时存在,并一直持续到程序结束(就像全局变量一样)。

但是,请注意,在您的代码示例中,"blah blah"是字符串文字。但是您的s只是一个从字符串文字初始化(通过复制数据)的局部变量。您的s与任何其他局部变量具有相同的生存期-只要控件通过func,它就会存在。

还要注意的是,C中的字符串文字不被认为是const chart *,因为您似乎不正确地认为这一点。C语言中"blah blah"的类型实际上是char [10]。数组类型可以衰减为指针类型,但即使在这种情况下,它也将是char *而不是const char *

"blah blah"存储在堆栈上,就像函数中声明的任何其他自动变量或数组一样。

建筑

char s[] = "blah blah";

相当于

char s[] = {'b', 'l', 'a', 'h', ' ', 'b', 'l', 'a', 'h', ''};

并且它初始化数组。

您可以将字符数组视为char * const,因为它们的行为方式与数组几乎相同,但从技术上讲,数组就是数组,指针就是指针。然而,这与const char *不同。char * const表示不能修改指针,const char *表示不能通过该指针修改内存。

最新更新