繁体   English   中英

字符指针

[英]character pointer

为什么此代码不起作用?

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

但这有效吗?

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

在第一个代码中,您声明一个指针,该指针指向字符串文字"abcde"
这可能是一个常数,您将无法更改它。

第二个代码声明一个数组,并用['a','b',c','d','e','\\0']填充,它不是常数-因此您可以更改它。

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

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

您还应该检查一下char *和char []之间的区别。

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

 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM