C语言指针,如何操作字符串?linux C第45讲

C语言指针,如何操作字符串?linux C第45讲

编码文章call10242025-06-30 15:13:594A+A-

1 指针操作字符串

在学习数组的时候,我们了解了字符串的定义,我们可以定义一个字符数组,用来存放一个字符串,例如:

char array[] = {"abcde"};

char buf[]={"韦凯峰 Linux C/C++ 零基础编程教程!\n"};

char buf1[]={"Linux系统编程\nOpenwrt系统开发\n\n"};

char tmp[]={"xxx\n"};

那么,学习了指针,我们可以定义一个char类型的字符指针变量,字符指针变量存放字符串的地址,那么,字符指针变量指向字符的地址。例如:

可以看到,定义了字符指针变量pstr,并且把 array[] 数组的首地址赋给该指针变量,然后,输出pstr指针变量指向的字符串。

也可以把一个字符串常量,赋给字符串指针。程序测试代码如下:

可以看到,我们定义了char类型的指针变量,然后,可以直接把字符串常量赋给字符指针变量。那么,字符指针变量就存放字符串常量的首地址。

所以,可以输出字符指针变量指向的字符串常量。

2 字符串常量操作异常

在定义字符串的时候,有如下的形式:

char array[] = "abcde";

定义了字符数组array[ ],存放字符串数据。如下的形式,是定义一个指针,直接指向一个字符串:

char* p1 = "www123"; //把字符串常量赋给指针变量p1

定义字符串指针p1,指向字符串常量。

那么,array[ ]字符数组中存放的数据是普通的字符数据,可以修改。但是,字符指针p1指向的地址,是存放“字符串常量”,是不允许修改。

程序测试例子如下:

程序运行结果如下:

可以看到,执行 array[3] = 'A' 是正确的操作。但是,执行 p1[3] = 'A'的时候,就提示了Segmentation fault错误,是内存段错误。

因为,字符串指针p1指向的是字符串常量,字符串常量中的字符是常量,不可以被修改。

点击这里复制本文地址 以上内容由文彬编程网整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!
qrcode

文彬编程网 © All Rights Reserved.  蜀ICP备2024111239号-4