当前位置:编程学习 > C/C++ >>

c语言程序设计 关于strcpy

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语言设计那本书

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,