C语言 指针字符串 , char * msg; msg="1234567890"; msg[5]='A' Linux运行不对,HP,Solaris运行对。

作者&投稿:敛种 (若有异议请与网页底部的电邮联系)
编写一个字符串的第m个字符开始拷贝到另外一个字符串的程序,这样怎么就不对了呢?~

#includevoid copy(char *ap,char *bp,int m);int main(){ char a[20]; char b[20]; int m; scanf("%s%d",a,&m); //字符串输入要用%s copy(a,b,m); printf("%s
",b); //字符串输出用%s return 0;}void copy(char *ap,char *bp,int m){ int i; for( i=m;ap[i]!='\0';i++ ) *bp++=ap[i]; *bp='\0';}

char * msg;
msg="1234567890";
这样定义就相当于msg指针指向的是一个const变量,也就是说msg = “1234567890”所在的内存区域是不可写的。所以msg[5] = 'A'没有写内存的权限,所以就会报错。char *msg = "1234567890"这样定义编译器编译的时候就会把msg当做是const变量放在不可写的内存区域。

#include <stdlib.h>
#include <string.h>
int main(void) {
int res;
char * msg;
char msg1[] ="1234567890";
msg = msg1;
printf("111msg[5]:%s
", &msg[5]);
msg[5]='A';
printf("222msg[5]:%s
", &msg[5]);
return 0;
}
另外,团IDC网上有许多产品团购,便宜有口碑

char * msg;
msg="1234567890";
这样定义就相当于msg指针指向的是一个const变量,也就是说msg = “1234567890”所在的内存区域是不可写的。所以msg[5] = 'A'没有写内存的权限,所以就会报错。char *msg = "1234567890"这样定义编译器编译的时候就会把msg当做是const变量放在不可写的内存区域。

#include <stdlib.h>
#include <string.h>
int main(void) {
int res;
char * msg;
char msg1[] ="1234567890";
msg = msg1;
printf("111msg[5]:%s\n", &msg[5]);
msg[5]='A';
printf("222msg[5]:%s\n", &msg[5]);
return 0;
}

char * msg; msg="1234567890"; msg[5]='A'

=>因为赋值给msg的值是一个常量,所以不允许改变其值(这在C中绝对是出错的)。

可以这样修改就对了
char msg[] ="1234567890"; msg[5]='A'

这样是没有问题的


樟树市18257434449: C语言中的“char指针初始化”是什么意思? -
窄呼麦味: char 指针,也就是char *类型. 其初始化本质上与其它变量初始化没有什么区别,就是赋予其一个初始化的值. 对于指针来说,在C语言中,就是一个地址.区分初始化情况,有四种表象: 1 初始化为空.即 char * str = NULL; 的形式,NULL...

樟树市18257434449: c语言中的char -
窄呼麦味: char 类型是一个内存占8位的类型.它最大的好处就是再计算机中访问地址以8位来跳转. eg: char data[100] = {0}; // 这是利用指针访问data数组内容char* pData = data; for (int n = 0; n<100; n++){*pData = 1; }/// int a = 0; // 这是利用char 类型访问一个整型. char* pA = (char*)a; for (int n = 0; n < sizeof(a); n++){*pA = 1; }有时候char 不一定表示的是字符.它只是一个8位的内存.希望对你有帮助!

樟树市18257434449: C语言中的char具体用法 -
窄呼麦味: C语言中char用于定义字符类型变量或字符指针变量,例如“char a;”则定义了变量a是字符类型,“char *a;”则定义了变量a是字符指针类型. char是C语言整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认...

樟树市18257434449: c语言中char是什么意思 -
窄呼麦味: 楼上完全是误导人,什么字符变量啊! char 是一个数据类型,作用才是定义字符型变量(单个或是字符串). 比方int 是整形数据,int a = 3;这里int 是类型, a 是整型变量,3是赋值; char s = 'A'; char是字符类型,s是字符型变量,A是赋值给变量s; char s[] = "c program"; char是字符类型,s[]是字符型数组,"c program"是赋给数组的值.

樟树市18257434449: 请问c语言中char[],与char*形式代表字符串分别都是什么意思?两者又是什么区别? -
窄呼麦味: char[] 在作为函数形参的时候会被优化成char *,代表字符串的时候,char[]是数组,数组有空间,存放着字符串,char *为常量指针,只占一个指针的空间(4个字节).

樟树市18257434449: c语言中char*是什么意思? -
窄呼麦味: char* 是声明一个字符类型的指针. 比如:chat* y; 就是声明一个指针y,这个指针指向的地址上只能存放字符类型的值. 扩展资料:在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在...

樟树市18257434449: 关于C语言的char关键词 -
窄呼麦味: *是指针声明符.这句话的意思是定义个一个char型的名叫Char的指针.这个指针指向I LOVE CHINAZ这个字符串的存储地址(通俗点讲就是Char这个变量存储了I LOVE CHINA这句话的存储地址)

樟树市18257434449: c语言 {char c;}可以定义字符串吗? -
窄呼麦味: 不可以定义字符串.c语言中定义字符串有两种办法: 1、定义一个字符指针指向字符串char *s="safdfsdf"; 2、定义字符数组char s[]="dsfdsfsdf",数组大小可以不写,如果你直接赋值的话,编译器会根据字符串长度分配对应的空间,若给了大小,也可以赋值,这时要自己注意字符串长度不要比长度-1还大

樟树市18257434449: C语言Char指针 -
窄呼麦味: cout<<操作符的问题· 当<<跟的是char*的话,就输出字符串 p和&a[0]是char*类型,所以是输出数组的整个字符串 cout<<(void*)p<<endl;//可输出p的内容,即数组的首地址 cout<<&a<<endl;//输出a的首地址

樟树市18257434449: C语言中char什么意思 -
窄呼麦味: 字符类型啊,关键字之一,必须记住和遵循,基本语法

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网