1 指针操作字符串

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

char array[] = {"abcde"};

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

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

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

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

c语言使用指针实现字符串比较(如何操作字符串)(1)

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

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

c语言使用指针实现字符串比较(如何操作字符串)(2)

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

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

2 字符串常量操作异常

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

char array[] = "abcde";

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

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

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

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

程序测试例子如下:

c语言使用指针实现字符串比较(如何操作字符串)(3)

程序运行结果如下:

c语言使用指针实现字符串比较(如何操作字符串)(4)

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

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

,