又是面试—每日一题,今天已经是这个系列的第5篇博文了!继续~~希望大家也能给力,给我顶起,也
好让我写的有信心啊!
好了,废话少说!开始今天的正题!
#include <iostream> using namespace std; int main() { char string[10]; char *str1 = "0123456789"; strcpy(string, str1); }
以上代码有错误吗?
嘿嘿!如果他这么问你,那肯定有错误了!这似乎是一种思维定势了,好了,错误是有的,我已经在我
的机子上跑过了!错误是一定有的!现在请指出错误,并加以改正!
同时,方便大家比较,我在举上几个类似的例子:
#include <iostream> using namespace std; int main() { char string[10], str1[10]; for (int i = 0; i < 10;i++) { str1[i] ='a'; } strcpy(string, str1); }
好了,例子我就举这么多了!现在不要看我的解答,你给我个答案吧!
为什么有错,错在哪里?如何解决呢?
好了,如果你是在想不出来,就看看我的解释吧,不要问我的解释对不对!或许我理解的也不对,但
是,男人的第六感告诉我,我的理解应该是对的,跟我来吧!数组越界,是的,答案就是这个,你有没有
想过呢?答案就是数组越界,或许,大概,可能这个词在你的脑海里,或者说这个答案在你的脑海里一闪
而过,或者说,你知道了这个答案,你不知道为什么?还有可能,你比我还懂这个问题,那请你留下你的
联系方式,我们沟通一下,如何!
为什么说数组越界?
首先,来看看这个strcpy这个函数。这个函数是干什么的,我不想说什么?你应该非常的懂,还有神
马strlen,strcmp等等,哦,对了,现在不懂,你应该翻出你的书看看,或者看看msdn上说的,我想过段时
间,可能有更多的关于这类函数的面试题,为什么?你问我为什么?因为这些是字符串的标准处理函数,
处理起来很好很强大,写出来的程序更健壮,不是吗?如果你不知道,你该去问问你的老师了!
好了,又扯远了,应该说strcpy的,来看看函数原型吧!
char *strcpy(
char *strDestination,
const char *strSource
);
如果你问我,我怎么知道函数原型的话,我说宝贝,你太愚蠢了,如果不知道函数原型,你怎么用
呢?或者,你该到msdn上查查了,msdn那可是一个大宝贝,哈哈哈!是的,函数原型写的很清楚,如果你
的英文还可以的话,那就更不用我浪费口舌了,是的,我不想说太多的话,等等,我去喝口水,因为我说
的有点多了!
strDestination参数是什么?目的字符串,不是有一个单词叫什么Destination吗?就在当中,看到了
吗?
那strSource参数又是什么?Source是什么意思?是的,就是原字符串。哦,是的,英语不错,我是对
我自己说的。不是夸你,伙计!如果你也知道,没有听我说,你就知道,你也该奖励你自己一下,不是
吗?
好了,伙计,strcpy这个问题解决了吗?没有,还有,就是C++中的字符串,是的,就是字符串是以什
么结束的,是的,在C++中每一个字符串都有一个结束标示,这个如果你不知道,现在知道了吧。是什么
标示呢?就是“/0”。你该看看书了,书上一定会说的。现在,就是这两个参数,也就是这个问题,如果
一个参数,就是字符串没有“/0”这个结束标示,那么在copy的时候就一定会出错的,是的,如果原字符
串没有结束标示符,那么久会一直复制下去,就会报错的!是的,数组越界,编译时时不会出错的,但是
如果在运行时,就会弹出错误的对话框的。
忘了,还有一点没有讲!那么那个结束标示符是怎么加上去的呢?是手动的还是系统自己加上去呢?
好了,现在我告诉你吧!
char string[10];
char *str1 = "01234567";
strcpy(string, str1);
for (int i = 0; i < 10; i++)
{
cout<<string[i];
}
又是一段代码,是的,这段代码是对的,毫无疑问的对的!看看,能知道问什么吗?
当你初始化数组,是的,数组用来存放字符串的,当定义数组长度小于或等于初始字符个数时,系统
不会添加结束标示符的。但是,如果字符个数小于数组长度时,C++对字符串常量自动添加结束标示符
的。好了,什么错,为什么错,我都说清楚了,希望你能懂得,如何解决问题,自己动手吧!还等什么,
不要说还等我把错误改过来吧!对不起,我要睡觉了!各位,晚安!
哦,不!最后在说一句,其实,strncpy和memcpy是不错的选择,你试试看!好了,这次真的该去睡
觉了!
最后,如果大家还有什么问题!或者说错误自己还是不会改的话,请贴出你的问题,我会在第一时间
回答你的问题!是的,我的博客宗旨是,你我互相学习!