C程序字符串字面 [英] C Program String Literals

查看:95
本文介绍了C程序字符串字面的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我们做

char *p ="house";
 p = 'm';

它不允许的。

但是,当我们做

 char p[] = "house";
 p[0] = 'm';
 printf(p);

它给O / P为:鼠标

It gives O/P as : mouse

我不能够理解的方式和其中C做内存分配的字符串常量?

I am not able to understand how and where C does memory allocation for string literals?

推荐答案

字符P [] =房子;

房子是一个字符串存储在只读位置,但是,p是放在堆栈的字符在的数组房子复制。

"house" is a string literal stored in a read only location, but, p is an array of chars placed on stack in which "house" is copied.

然而,在的char * p =房子; P 实际上指向只读位置其中包含字符串房子,从而改变它UB。

However, in char *p = "house";, p actually points to the read-only location which contains the string literal "house", thus modifying it is UB.

从标准的说明 6.7.8初始化

14字符类型的数组,可以用一个字符串被初始化
  文字,可选大括号括起来。的连续字符
  字符串文字(包括终止空字符,如果
  有空间,或如果阵列是未知大小的)初始化
  的数组的元素

14 An array of character type may be initialized by a character string literal, optionally enclosed in braces. Successive characters of the character string literal (including the terminating null character if there is room or if the array is of unknown size) initialize the elements of the array.

所以你基本上字符数组。它不应该是那么困难或困惑你的理解,如果你使用了整数数组这个数组如何被修改浮动

So you basically have an array of characters. It should not be so difficult or puzzle you in understanding how this array gets modified if you have used arrays of ints, floats etc.

这篇关于C程序字符串字面的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆