我创建了一个变量并分配了一些值。 当我调用一个函数并尝试更改变量的值时,我收到了总线错误。
如果我使用malloc,则可以。
我的问题是:
为什么没有malloc不能正常工作?
因为我认为从理论上讲,当您创建一个变量时,您会自动拥有一个内存地址(printf(“%p”)证明),并且您可以访问该变量值,因此已经分配并使用了内存。
那为什么没有总线错误就不能更改?
那是我的代码
void strclr(char *s)
{
printf("%s \n", s);
while(*s)
{
*s = '\0';
s++;
}
printf("%s ok", s);
}
int main()
{
char *str = strdup("testing"); //allocate with malloc
char *str2 = "testing";
strclr(str); //works
strclr(str2); //don't work, bus error;
}
答案 0 :(得分:1)
str2
指向字符串文字。这些是只读的,实际上通常放置在内存的只读部分中。这就是为什么在尝试修改时会出现总线错误。
如果您将str2
定义为数组,则可以对其进行修改。
char str2[] = "testing";
在这里,我们有一个已初始化且带有字符串文字的数组。它本身不是字符串文字。