strcpy问题
在书中看到这样一段话:如果在复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的‘\0’一起复制到字符数组1中,取...
在书中看到这样一段话:
如果在复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的‘\0’一起复制到字符数组1中,取代字符数组1中的前面6个字符,最后4个字符并不一定是‘\0’,而是str1中原有的最后4个字节的内容。
这句话什么意思???我试了没有对str1数组初始化,但是还是和初始化了的结果一样,只显示复制的内容。
还有,怎样才能只覆盖str1前面的字符,而其后面的还显示。 展开
如果在复制前未对str1数组初始化或赋值,则str1各字节中的内容是无法预知的,复制时将str2中的字符串和其后的‘\0’一起复制到字符数组1中,取代字符数组1中的前面6个字符,最后4个字符并不一定是‘\0’,而是str1中原有的最后4个字节的内容。
这句话什么意思???我试了没有对str1数组初始化,但是还是和初始化了的结果一样,只显示复制的内容。
还有,怎样才能只覆盖str1前面的字符,而其后面的还显示。 展开
2个回答
展开全部
如果str1没有初始化,那么“在复制前”,其内容是不可预知的。
在复制后,str2在0之前的内容(包括0本身)会覆盖str1原有内容,str1后面的内容保持不可预知。
比如你写了char text[10];
那么到此位置text里面有啥无法预测,有的编译器会把所有10个字节都设置为0。
假设你str1初始化得到的东西如下
0 1 2 3 4 5 6 7 8 9(实际肯定不会如此规律)
然后你的str2为
3 2 1 0 9 8 7 6 5 4
strcpy(str1, str2);后str1会变为
3 2 1 0 4 5 6 7 8 9(注意0往后与原来一样)
注意上面的数字不是字符而是字节,用字符串描述str1初始值就是"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9"
在复制后,str2在0之前的内容(包括0本身)会覆盖str1原有内容,str1后面的内容保持不可预知。
比如你写了char text[10];
那么到此位置text里面有啥无法预测,有的编译器会把所有10个字节都设置为0。
假设你str1初始化得到的东西如下
0 1 2 3 4 5 6 7 8 9(实际肯定不会如此规律)
然后你的str2为
3 2 1 0 9 8 7 6 5 4
strcpy(str1, str2);后str1会变为
3 2 1 0 4 5 6 7 8 9(注意0往后与原来一样)
注意上面的数字不是字符而是字节,用字符串描述str1初始值就是"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9"
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询