往strcpy()里传入char*[],这样为什么出错?
问题描述:
往strcpy()第一个参数里传入char*[],这样为什么出错?而直接用等号却没问题?
我用的是Dev-C++
代码如下:
#include
#include
int main(){
char *name[20] = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "万", "千", "天", "丕", "亮", "源", "雨", "伟", "东", "欢", "笑"};//20
char *s3[1];
// strcpy(s3[0],name[19]);//这样运行出错,编译没问题
// s3[0] = name[2];//这样没问题
printf("%s\n",s3[0]);
return 0;
}
答
s3[0]没有初始化
s3[0]=(char*)malloc(sizeof(char));
答
首先,name里面存的都是指针。
strcpy第二个参数是name[19],实际上是这个数组的最后一个成员,最后一个成员的后一位是野内存,你也不知道具体数值,对不?
strcpy是字符串复制处理,没有限制size,那么就会自动去内存中找字符串的结尾,什么是字符串结尾呢?就是0。
char *name[21] = {"一", "二", "三", "四", "五", "六", "七", "八", "九", "万", "千", "天", "丕", "亮", "源", "雨", "伟", "东", "欢", "笑",0};//20
改成21个,后面追加个0,,就好了。