字符指针

时间:2012-02-19 00:31:53

标签: c string

为什么这段代码不起作用?

int main(){
  char *str ="abcde";
   scanf("%s",str);
  printf("%s",str);
}

但这有效吗?

int main(){
  char str[] ="abcde";
   scanf("%s",str);
  printf("%s",str);
}`

3 个答案:

答案 0 :(得分:5)

在第一个代码中,您声明一个指向string literal"abcde"的指针。
这可能是一个常数,你将无法改变它。

第二个代码是声明一个数组并用['a','b',c','d','e','\0']填充它,并且不是常量 - 所以你可以改变它。

答案 1 :(得分:4)

因为char *str ="abcde";是指向字符串文字的指针,它很可能存储在只读存储器中。

char str[] ="abcde";是使用"abcde"初始化的数组。

您还应该查看Difference between char* and char[]

答案 2 :(得分:1)

  

当字符串值直接分配给指针时,它存储在一个   只读块(通常在数据段中),它们之间共享   功能

char *str  =  "GfG";
     

...

char str[] = "GfG";  /* Stored in stack segment like other auto
variables */  *(str+1) = 'n';   /* No problem: String is now GnG */

http://www.geeksforgeeks.org/archives/5328