char指针值重新分配

时间:2016-07-06 13:40:23

标签: c pointers char

#include<stdio.h>
#include<string.h>
int main()
{
    int i=0;
    char *b,*a="a(a+b))";
    b=a;
    printf("%s",b);
    printf("%d",a);
    while(a[i]!='\0')
    {
        a++;
        i++;
    }
    *a="(a+b)";
    printf("%s",a);
}

initialy我正在为该char指针赋值 使用null比较将其移动到最后 我可以再次为该char指针赋值吗? 我可以这样做吗? 这有什么不对?任何人都可以解释一下吗?

1 个答案:

答案 0 :(得分:1)

您的第三行失败的原因是您尝试取消引用并将值重新分配给堆栈上的“字符串”值。 (这非常非常糟糕,如果它曾经让你,请永远不要这样做)

如果您希望它工作,编译器必须创建一个新的字符串值并重新指定指针,因此您必须将代码更改为此。

a = "(a+b)";

这将在堆栈上创建一个新值,并将指针重新指定给该字符串的开头。

但是如果要使用这样的字符串。请使用const char *。它最终更安全,为您省去了许多麻烦。