您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
046第八章 指针06(新版)
发布时间:2021-05-04 11:08:35编辑:雪饮阅读()
在前面了解了字符串定义可以有两种方式一种是直接使用字符串指针的形式,一种是使用字符数组的形式。
那么这里分别用指针定义字符串a和b,然后实现将a字符串拷贝到b字符串如:
#include <stdio.h>
void copy_string( char *from, char *to )
{
for( ; *from != '\0'; from++,to++)
{
*to = *from;
}
*to = '\0';
}
void main()
{
char *a = "I am a teacher.";
char *b = "You are a student.";
printf("String a = %s\nString b = %s\n", a, b);
printf("copy string a to string b:\n");
copy_string(a, b);
printf("\nString a = %s\nString b = %s\n", a, b);
}
然后编译运行会发现最后拷贝结果没有出现:
D:\cproject>gcc main.c -o m
D:\cproject>m.exe
String a = I am a teacher.
String b = You are a student.
copy string a to string b:
如果是在一些老的系统里面可能还会报错内存不能读。
那么这里问题出现在哪里呢?
用字符数组和字符串指针都可实现字符串的存储和运算,但是两者是有区别的。
字符数组是一个数组,每个元素的值都可以改变。而字符串指针指向的是一个常量字符串,它被存放在程序的静态数据区,一旦定义就不能改变。这是最重要的区别。
所以程序重新修改如:
#include <stdio.h>
void copy_string( char *from, char *to )
{
for( ; *from != '\0'; from++,to++)
{
*to = *from;
}
*to = '\0';
}
void main()
{
char *a = "I am a teacher.";
char b[] = "You are a student.";
printf("String a = %s\nString b = %s\n", a, b);
printf("copy string a to string b:\n");
copy_string(a, b);
printf("\nString a = %s\nString b = %s\n", a, b);
}
然后编译运行就没有问题了
这里需要注意的就是字符串指针定义的字符串一旦定义就不能改变这个关键概念。
关键字词:指针,数组,字符