由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储

Posted 小德cyj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
#include <string.h>
int main()
{
char s[]="Copywrite 1999-2000 GGV Technologies";
char* s2=strupr(s);//把s数组中的字符串转换成大写并且返回s用来初始化s2
printf("%s",s2);
printf("%s",s); //这个时候s和s2是相等的,指向同一个字符串。
// 注意:不能使用以下方式调用
// char* p="for test";
// strupr(p);
// 这样调用会产生异常,原因是:指针p 这里定义的是常量字串,而常量字串我们知道是不可以更改的
getchar();
return 0;
}

个人理解如下:

在C语言中没有专门的字符串变量,如果想将一个字符串存放在变量中以便保存,必须使用字符数组,即用一个字符型数组来存放一个字符串,数组中每一个元素存放一个字符。

在程序中,字符串常量会生成一个“指向字符的常量指针”。当一个字符串常量出现于一个表达式中时,表达式所使用的值就是这些字符所存储的地址,而不是这些字符本身。因此,你可以把字符串常量赋值给一个“指向字符 的指针”,例如:char *a = "123" ; a = "abc";,后者指向这些字符所存储的地址。但是,你不能把字符串常量赋值给一个字符数组,因为字符串常量的直接值是一个指针,而不是这些字符本身。例如:char a[5];a[0] = "a";就是错误的,报错结果:invalid conversion from ‘const char*‘ to ‘char‘。

指针形式仅仅是将常量的地址告诉了指针,程序在执行时是无法修改常量所在的地址区域;数组形式将常量赋给了一个数组变量。

以上是关于由strupr,strlwr体会如果将字符常量转换为变量进行修改,体会常量的静态存储的主要内容,如果未能解决你的问题,请参考以下文章

在Linux下有将字符串进行大小写转换的函数吗

怎么C语言编写一个函数字符串的大小写转换

c_cpp _strlwr&_strupr

visual studio2017怎么使用strcat,strcpy,strlwr,strupr

C语言把字串转换大小写的函数

为啥在Linux中strlwr()不能编译通过,已经查看过<string.h>,的确在头文件中没有