c语言程序设计 关于strcpy
strcpy(字符串变量1,字符串变量2) 那么当字符串变量1比字符串变量2更长的时候。 字符串变量1:………………\0 字符串变量2:………\0 strcpy后:……\0 ……\0 是不是就变成了这样呢?只不过在输出的时候遇到了第一个\0就输出结束,后面的不再输出???????????????
strcpy(字符串变量1,字符串变量2) 那么当字符串变量1比字符串变量2更长的时候。 字符串变量1:………………\0 字符串变量2:………\0 strcpy后:……\0 ……\0 是不是就变成了这样呢?只不过在输出的时候遇到了第一个\0就输出结束,后面的不再输出???????????????
答案:对,是这样的。
所以有很多对字符串清空时会这样做:
char buf[80];
....
.....
buf[0] = '\0';
其他:不是这样的,
比如这个程序:
char strDest[5]="abcd";
char strSource[8]="efghijk";
strcpy(strDest,strSource);
printf("%s",strDest);
输出的是efghijk
只不过运行的时候会报栈溢出的错误。
MSDN上也是这样说的啊:
The strcpy function copies strSource, including the terminating null character, to the location specified by strDestination. No overflow checking is performed when strings are copied or appended. 你说的对。 char *s1 = "12345", *s2 = "1234"; 这两个语句让s1、s2指向字符串常量
下面char *p = strcpy(s1, s2); 这个语句对字符串“常量”进行修改,当然出错。
改成char s1[] = "12345", s2[] = "1234"; char *p = strcpy(s1, s2);就好了(字符数组相当于“变量”)
VC把变量存在变量区,常量存在常量区.变量的初始化就是把一个值从常量区复制到变量区。而此问题中的s1与s2直接指向常量,常量区的值是不能更改的,这便是你出错的原因
tuboc中你的程序是可以通过的。由此说明了vc比tc安全:它禁止了对常量的操作
上一个:C语言里面%g的具体实例用法
下一个:求个好用的Visual C++6.0 软件 我刚刚开始学c语言 准备考c语言2级考试 用的是谭浩强的c语言设计那本书