字符串常量的值是一个地址常量,将字符串赋值给字符数组后,为什么数组名的值与字符串常量的值并不一致?

字符串常量的值是一个地址常量,将字符串赋值给字符数组后,为什么数组名的值与字符串常量的值并不一致?图片

0

2个回答

字符串放在常量区,当赋值给数组初始化时,会发生数据拷贝,将happy拷贝至局部数组所在的栈区,所以数组跟原字符串的地址是不同的

2

数组a和字符串常量存储在不同地方,只不过内容一样,所以地址不同

0
qq_37856908
人谷人 那分别存储在什么地方呢?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
6. 新的字符串常量值
   String str = R”delim(values)delim”  //str = values    其中 delim是字符序列,最多十六个字符,不能是双引号,反斜杠还有括号
怎么能改变字符串常量的值?
为什么使用数组就可以改变字符串常量,而使用指针就不行了rnchar na[] = "123";rn char nb[] = "45";rn char *nc = "789";rn char *nd = "987";rn strcpy(na, nb);rn strcpy(nc, nd);rn printf("%s\n%s\n", na, nb);rn printf("%s\n%s\n", nc, nd);
如何修改一个字符串常量的值?
关于程序内存布局的问题在面试中经常会被问到,其中尤其常见的是问字符串常量到底存在哪个地方,是堆区,栈区,还是全局变量区?一般答案都会说是全局变量区,但是在我尝试更改字符串常量的值的时候却引发了一些问题。首先我尝试了使用VirtualProtect更改Windows下的字符串常量值的读写权限,很成功的更改了其值,但是在对Linux进行处理时则不然,使用先是mprotect失败,原因为EINVAL,查...
字符串常量与字符数组
字符数组的初始化:char a[6] = "hello1";// char b[6] = {'h','e','l','l','o','2',0}; char c[] = "hello3";//c字符:h,e,l,l,o,3,\0 char d[] ={'h','e','l','l','o','4','\0'};//d字符:h,e,l,l,o,4,\0  strcpy(a,b); //以\0为结束字...
字符数组和字符串常量
我们在定义一个数组用于保存字符串时,程序很容易崩溃,很可能是因为定义了一个不能修改的字符串常量。 例如: char *str1=“abcde”;中,str1保存的的是字符串的地址而非字符串本身,当试图修改一个不可改变的字符串常量时,程序崩溃 char *str2[]=“abcde”;中,str2为一个字符数组,每个单元格保存一个字符常量,可以修改。 ...
字符串常量和字符数组
char *Mystrcat(char *des,const char *src) {     assert(des!=NULL && src!=NULL);     char *p = des;     while(*des!='\0')//找尾巴     {         des++;     }     while(*des++ = *src++);//复制     ...
字符串常量不可赋值,字符数组可以
C语言中除了初始化外,给字符串赋值的方法有memcpy、strcpy和sprintf。 项目中将使用到的字符串定义为常量,然后试图用sprintf改变它的值,一直失败,后来定义改为字符数组就可以了。代码如下: char *str = "aaaa"; char chArray[] = "aaaa"; sprintf(str,"%s"...
字符串常量赋值给整型变量?
#include rnint main(void)rnrn int a;rnrn a = "hello world!";rn printf("%s\n", a);rn return 0;rnrnrn这段代码可以运行正确结果。rn但不明白:字符串常量可以赋给整型变量,且该变量用%s输出还可以得到正确结果?。请明白的给解释下,谢谢!
字符数组为什么不能被赋值 字符串常量?
比如说 rnchar c[6]; rnc ="77777777777";//这儿是不行的rnvc2005上报的错是 cannot convert from 'const char [12]' to 'char [6]'rnrn也有听人解释过 说是 常量字符串 不能被 赋值给 非常量变量rnrn但是rnchar *str;rnstr = "7777777777";rnrn为什么这样就是可以的呢?str 不是常量阿.rnrn我认为是类型不匹配的问题, 但不是从const到非const不匹配的问题, 而是指针和非指针不匹配的问题, 不知道我理解的对不对, 请达人指教阿!!!!!
C语言的字符数组,字符串,字符串常量
一、字符数组与字符串 首先来看一段源代码: #include <stdio.h> int main() { char arr[10] = {'a','b','c'};//剩余部分为'\0' char brr[] = {'a','b','c'};//不是字符串,因为没有'\0' char crr[10] = {"abc"};//字符数组特有 char drr[10] ...
怎样把一个字符串常量赋值给一个字符数组?
网上的回答大概都是这样的:rnchar c[50];rnstring s = "hello ni mei";rnstrcpy(c,s);rn但是,如果字符串的长度不知道呢,或者字符串长度很小,你定义一个很大的字符数组,岂不是浪费内存吗?rn或者是这样?rnint len = s.length();rnchar c[len];//c++ 里面这条语句不能通过吧?
数组名的值、数组名取地址&的值、数组名取sizeof的值
代码如下: int a[5] = { 1, 2, 3, 4, 5 };printf("%d,%d\r\n", a, &a);printf("%d,%d\r\n", a + 1, &a + 1);printf("\r\n");int b[3] = { 1, 2, 3 };printf("%d,%d\r\n", b, &b);printf("%d,%d\r\n", b + 1, &b + 1);pr
字符串常量与字符数组区别
字符串常量 存储在静态常量区,静态常量区的数据只能被访问、不能被修改 字符串数组 数组存放在堆栈区,堆栈区的数据可以被修改 代码: #include<iostream> using namespace std; void main() { //str++ 不能++,数组名为指针常量没有指针p++的功能 char str[]="Hello...
字符串常量 与 字符数组 的区别
字符串常量与字符数组的区别: 例如: char *str1 = “abcde” (1) char str2[] = “abcde” (2) 表面上看起来没有什么区别,但在使用中会出现问题 (1)中只能读取 却不能修改 str1[0] = ‘x’ 运行会出问题 因为str1只保存的是"abcde"的地址 (2)中可以对其进行赋值运算 (2)是对数组str2[]的初始化 ...
为什么可以用字符串常量赋值给char *?
char *p;rnp = "hi...";rnrnrn不是说,const指针不能赋值给 非const指针么?
论字符串常量和字符数组
我们在使用数组时经常会遇到程序崩溃,字符串崩溃原因:1、试图修改字符串常量的值2、越界。通过下列程序来分析错误的原因:(1):int main(){    char *str1 = "abcde";  //在这里str1为字符串常量,不能修改,是指针,4个字节    char str2[] = "abcde";  //str2为字符数组,有'\0',所以也是字符串,6个字节// str1[0] =...
字符数组,字符指针,字符串常量
字符数组纯粹是数组。用字符串初始化的时候是复制一份常量。常量类型为const char*。 字符数组赋值为复制一份。字符指针未复制指针。把const指针赋值给指针,这是大忌啊 字符指针是指针。这时候就不能用字符串常量初始化了。 根源数组名和指针有一定区别。 http://www.cnblogs.com/VIPler/p/4342896.html http://tech.163
字符串常量与字符数组的内部存储区别
例如:在主函数中,二者 int main() {     char *str1 = "abcde";    //字符串常量     char str2[] = "abcde";     //字符数组     str1[0] = 'x';  //str1中只存放了"abcde"的地址,所以不能对其进行修改,这个语句语法没有错,但编译出现崩溃     str2[0] = 'x';  //字符数组st...
字符串常量与字符数组问题
请大家看看下面的一个函数: rn char *f() rn rn char s[15]="abcde"; rn return(s); rn rn rn这里的"abcde"是存储在静态存储区,s是存储在动态存储区的,对吗?
c++学习笔记-----字符数组和字符串常量
字符串常量的类型是指向字符的指针,它与字符数组是同属一种类型,字符串常量在内存中以‘\0’结尾,这种类型的字符串成为c字符串。 字符串常量通常存放在内存data区中的const区,而字符数组根据其数据存储特点放在相应位置,如果字符数组是全局变量,就存放在内存data区中的全局或者静态区如果是局部变量,那么就存放到栈区 当编译器遇到一个字符串常量时,就把它放到字符串池中(data
字符数组和字符串常量的区别
char *str1="abcde";//字符串常量 char str2[]="abcde";//字符数组 字符串常量:字符串常量不能修改,因为是共用的,*str1因为是指针类型的字符串常量,所以只占4个字节。 字符数组:如果想将一个字符串存放到变量中,必须使用字符数组,就是用一个字符型数组存放一个字符串 ...
2字符串常量到字符数组
C语言视频培训教程,本课程属于C语言编码技能提高篇,帮助学习过C语言的人,更上一个台阶。课程内容涉及:C语言类型转化、深入理解二维数组、指针、二级指针及多级指针、回调函数、双向链表、排序、贪吃蛇项目案例实战等。
字符串常量和字符数组的区分
首先我们来看个程序,这个程序说的是字符串函数strcat()函数的实现:#include<stdlib.h> #include<assert.h> #include<stdio.h> #define MAX 20 char *my_strcat(char *dest, const char *src) { char * ret = dest; assert(dest); as
字符串常量与const字符数组的区别?
rnrn请问以下理解正确吗?rnrn字符串常量在内存中是放在常量区的,因此当字符串常量所在的函数调用结束后,字符串常量并不会被销毁。rnrn而定义在函数内部的const字符数组在内存中是放在局部变量区也就是栈区的,因此当const字符数组所在的函数调用结束后,const字符数组会被销毁。
求助~~~~ C字符串常量和字符数组
scanf("%s", s);是读取一串字符串到一个字符数组中,如下:rn[code=C/C++]rnint main(void) rn char a[100];rn scanf("%s", a);rn printf("%s", a);rnrn[/code]rn编译运行 在一定条件下(字符串长度小于104)没有问题。但为什么rn[code=C/C++]rnint main(void) rn char *s = "";rn scanf("%s", s);rn printf("%s", s);rnrn[/code]rn编译,运行 在一定条件下(字符串长度小于4)也会输出想要的结果?rn按理说:因为 char *s = "";是个字符串常量,不能被修改。但这里编译器并没有给出任何Warnings。rn因为scanf()函数接收一个指针,分别是&a[0]的一分COPY 和s 的一个COPY,编译器并不检查是字符数组还是字符串常量?是不是这样呢?rn2. 如果是这样,而 char *s = "";是个字符串常量,它是不是放在静态存储区中,且不允许修改。试图修改将会导致错误,然而此例却没有错误,可见是我理解错误了~~, 求高手解释,谢谢
10-2从字符串常量到字符数组
C语言基础入门到进阶教程,共16天,每天6节课,每节40分钟课堂实录,带你征服C语言,让所有学过和没有学过C语言的人,或是正准备学习C语言的人,找到学习C语言的不二法门。该课程涵盖C语言所有知识点,并且结合大量的案例,让人一听便懂。
字符串常量与字符数组在赋值交换中的区别
char str1[]=&quot;abcdef&quot;;char str2[]=&quot;qstr1 和str2 的地址都在栈里,如果要交换str1和str2的值只需char *p=(char *)malloc(siz)
字符串常量、布尔常量、宏定义常量
<span style="color:#3D3D3D;">本课程详细讲授全国计算机等级考试二级C++考试的所有重点和考点。并对考试原题中的每一个知识点进行了解释和剖析。 </span><br /><span style="color:#3D3D3D;">课程内容:表达式和语句 选择判断语句 循环语句 函数 数组、指针和引用 构造数据类型 类和对象 派生与继承 模板 文件的操作。</span>
关于不能改变字符串常量值的理解
char *buf = "hello World!"; //关于字符串常量值不能修改理解, 因为字符串定义在全局常量区, //下面这句就是尝试改变字符串的值, 所以该语句错误 strcpy(buf, "q345w4565467"); //这句不是改变字符串的值, 是改变指针的指向,所以运行没有问题 buf = "q345w4565467";
实现将字符串常量s2的值赋给字符串常量s1,让字符串s1输出字符串s2的值,为什么无法实现?
实现将字符串常量s2的值赋给字符串常量s1,让字符串s1输出字符串s2的值,为什么无法实现? 问题如下:rn#include rn#include"stdlib.h"rnmain()rnrn char y[9];rn char *s1="iya";rn char *s2="abc";rn for(;*s2;s1++,s2++)rn s1=s2; //这行将s2的地址赋给s1,是不是相当于将地址对应的值赋给s1,也就是实现*s1=*s2.rn rn *s1='\0';rn s1=&s2[0]; //这行是不是相当于将指针s1指向s2的首地址,rn printf("%s",s1); rn system("pause");rn[img=https://img-bbs.csdn.net/upload/201708/13/1502606958_519290.jpg][/img]
怎样将当前字符串常量转换为字符数组
rn将s转换为字符数组的z?具体的程序该怎样写呀?谢谢了!rnString s="Who are you?";rnchar z[]=s.toCharArray();
怎样将字符数组里的值附给字符串
比如:rna[4]是'1' '2' '3' '4' '5'rnb:stringrn要使b:='12345'rn怎样才能实现呢?请教各位高手!!
字符串常量赋值和编译器问题
用的是VS2017 rn发现用字符串常量给char *赋值会报错rn比如 char *a = "hello" 很简单的一句话输出a时会提出报错rn说是“初始化”: 无法从“const char [6]”转换为“char *”rn然后我在char前面加个const就可以正常的通过 确实可以理解为字符串常量是const不能让char *指向他rn但是以前一直是不加const就可以成功赋值 突然来这么一出有点不适应 不知道为什么要做这个修改rnrn朋友用VS2015就可以正常赋值 这是编译器的问题吗rn
字符串常量赋值导致的错误
下面的程序运行的时候出现段错误:char * str = "hello world"; (*str) += 32;原因:初始化时候虽然str是指针,但是指针指向的字符串“hello world”是常量,不能对常量进行修改。
字符串常量
#-*-coding:utf-8-*- ''' Created on 2016年3月29日@author: Zroad '''""" 一、字符串常量: 字符串类型分为如下两种: 1、str类型:ASC||编码,Python默认的编码方式,不能表示汉字 2、unicode类型:Unicode编码,表示汉字、日、韩文等,字符串钱加'u','U' """ #1、字符串的表示方式 print 'spa"m'
如果将字符数组赋值给const常量?
LanguageData=split(rsLanguage("LanguageData"),"|||")rnConst pubnowstation=LanguageData(0)rnrn代码是像上面那样写的,为什么会报下面这样的错误!搞不懂,我用response.write LanguageData(0)输入时是有一组字符的rn------------------------------------------------------------------------------------------rnMicrosoft VBScript 编译器错误 错误 '800a03f6' rnrn缺少 'End' rnrn/iisHelp/common/500-100.asp,行242 rnrnMicrosoft VBScript 编译器错误 错误 '800a0415' rnrn缺少文字常数 rnrn/WWW/inc/Language.asp,行26 rnrnConst pubnowstation=LanguageData(0)rn-----------------------------------^rn
指向 "字符串常量" 和 指向字符串的" 常量的指针"
在写模拟实现strcpy时,在修改目标字符串时,编译出错了。 void my_strcpy(char *dest,const char * str) {     assert(str != NULL);     while (*dest++ = *str++)     {         ;     } } int main() {     char str1[50] = &quot;hello worl...
c中字符串常量和字符数组的区别
在c语言中我们经常会认为字符串常量和字符数组是一样的,但实际上这两者有着本质的区别。 下面我么以一个例子来进行说明。       #include void mian() { printf("HelloWorld\n"); }当中的“HelloWorld\n”实际上代表的是一个指向无名字符数组的起始指针,该字符数组的大小是包含字符串中所有的内容,外加一个‘\0’。 所以 print
《C和指针》——字符数组和字符串常量的区别
字符数组形式:char message1[ ]=”Hello”; 尽管看上去像是一个字符串常量,实际上它并不量,它与char message[ ]={‘H’,’e’,’l’,’l’,’o’,’\0’}一样是字符数组 字符串常量形式:char *message2=”Hello”; 而message2是指向了字符串常量Hello的指针。 区别如下图所示: