C++拷贝函数的一个问题
我定义了一个长度为8的字符数组b,和一个长度为2的字符数组c,将b拷贝给c,为什么可以成功拷贝,c的长度不是不够吗,为什么还可以成功拷贝,而且还可以输出c[6],c的总长...
我定义了一个长度为8的字符数组b,和一个长度为2的字符数组c,将b拷贝给c,为什么可以成功拷贝,c的长度不是不够吗,为什么还可以成功拷贝,而且还可以输出c[6],c的总长度只有2啊,而且我输出它们的长度也是8和2。为什么可以这样拷贝?
展开
2个回答
展开全部
strcpy函数并不保证目标字符串有足够空间---这个需要程序员自己保证---其只是从从目标字符串的起始地址开始复制源字符串的各个字符,直到源字符串的尾部'\0';所以复制是可以的。
不过c数组之后的的内存已经被破坏,如果后续还有变量声明则可能破坏该变量的值,更严重的可能写入程序的代码区,从而导致程序崩溃。
sizeof函数只是返回数据类型或变量的大小,所以sizeof(b)=8, sizeof(c)=2,因为当时分配就给了这么大的空间, 要察看字符串长度应该用strlen(c)函数,其中c是 const char *;
可以通过以下程序来验证:
#include <stdio.h>
#include <string.h>
int main()
{
char a[8] = "abcdefg";
char b[2];
char c[2];
strcpy(b, a);
printf("%s\n",c);
printf("%x %x\n", b, c);
printf("%d,%d,%d\n", sizeof(a), sizeof(b), strlen(b));
return 0;
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询