看下面的一段代码。复制字符串
#include<stdio.h> void str_cpy( char *s,char *t) { while((*s=*t)!='\0') { s++; t++; } *s='\0'; } void main() { char *a="I am a teachar."; char *b="you are a student."; str_cpy(a,b); printf("%s\n",a); }
但是一运行就会报错,访问内存错误。为什么?
因为:char *a="I am a teachar."; 字符串存储在常量区。只能读,不能写。
怎么改呢?
把指针改成数组,如下:
char a[80]="I am a teachar.";
改后,字符串存储在栈区。就可以改了,程序正常输出。
再看下面一个简单例子:
#include<stdio.h>
#define MAX_NAME 5
typedef char* VertexType; int main() { VertexType a; scanf("%s",a); printf("%s",a); }
运行还是错误。应改为:
typedef char VertexType[MAX_NAME]; //数组类型
或者先跟指针类型分配空间:
typedef char* VertexType;
a=(VertexType)malloc(80);
程序正确运行。
注意数组不能写成:
typedef char[MAX_NAME] VertexType; 是错误的,
必须把维度写在名字后面。