编写一个程序,将字符数组s2中的所有字符复制到字符数组s1中,不用strcpy函数,编译结果不一致
编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中,不用strcpy函数,编译结果不一致!

如图所示编译结果不一致?
另外问各位大神那个“单步调试”具体怎么做,按f10吗?当看不懂程序的时候,单步调试能有什么好处,有什么帮助呢?
------解决思路----------------------
F11
代码有bug,如果输入超过80个字符怎么办?
------解决思路----------------------
没有问题
F10 逐过程
F11 逐语句
------解决思路----------------------
F9下断点,F5调试运行,这个程序F10单步,鼠标移上去看变量内容
------解决思路----------------------
单步调试一般用一般就用F10,F11是step in,如果遇到库函数也会进入,比较多余
单步调试可以让你明白你的每一句代码都干了什么,是否达到了你要的效果,当程序最终执行结果和预想的不一致时,就可以利用单步调试排查具体哪一行代码出问题!
看了你的代码让我想起了N年前的我自己,菜鸟一个,我试着copy一下来验证,唉,copy完我就后悔了,还不如自己重写一遍。
先指出你代码中有问题的部分:
1、main函数最好是返回int类型
2、别用vs下特有的_s函数,看着眼生貌似很牛逼,如果是跨平台的话,移植的时候有的你蛋疼
3、数组最好初始化char s1[80] = {0};
4、你用strlen(s2)来做限制,那么字符串结束符'\0'就不会被拷贝到s1中,这样打印出来的s1结尾就是乱码
5、你的变量命名是不规范的,可以百度一下匈牙利命名法则。
再看看我写的代码吧:
这是一道比较经典的C笔试题,考点全在STRCPY函数里面,考点分为:
1、STRCPY必须返回char*
2、要有断言,对入参进行判断
3、copy循环体
------解决思路----------------------
判断参数?有必要吗?误人子弟啊!
自己看看strcpy的实现吧!
------解决思路----------------------
最后目标字符串里尾巴得加个'\0'吧。或者你这样初始化char str[80] = {0};
断点调试就是在需要断点的地方按个F9,然后F5执行,F10单步执行,这时候自己观察监视器里每个变量的实时的数值啊,从而对是哪步出差错了可以很快的判别出来,F11进入函数,可以自己更直观的了解程序的执行流程。
------解决思路----------------------
scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
下面有一段话:4-6) Same as (1-3), except that %c, %s, and %[ conversion specifiers each expect two arguments (the usual pointer and a value of type rsize_t indicating the size of the receiving array,……
意思是%c, %s, 和 %[,后面对应两个参数:一个指针和指示此数组大小的值
你的scanf_s后面少个参数80
如图所示编译结果不一致?
另外问各位大神那个“单步调试”具体怎么做,按f10吗?当看不懂程序的时候,单步调试能有什么好处,有什么帮助呢?
------解决思路----------------------
F11
代码有bug,如果输入超过80个字符怎么办?
------解决思路----------------------
没有问题
F10 逐过程
F11 逐语句
------解决思路----------------------
F9下断点,F5调试运行,这个程序F10单步,鼠标移上去看变量内容
------解决思路----------------------
单步调试一般用一般就用F10,F11是step in,如果遇到库函数也会进入,比较多余
单步调试可以让你明白你的每一句代码都干了什么,是否达到了你要的效果,当程序最终执行结果和预想的不一致时,就可以利用单步调试排查具体哪一行代码出问题!
看了你的代码让我想起了N年前的我自己,菜鸟一个,我试着copy一下来验证,唉,copy完我就后悔了,还不如自己重写一遍。
先指出你代码中有问题的部分:
1、main函数最好是返回int类型
2、别用vs下特有的_s函数,看着眼生貌似很牛逼,如果是跨平台的话,移植的时候有的你蛋疼
3、数组最好初始化char s1[80] = {0};
4、你用strlen(s2)来做限制,那么字符串结束符'\0'就不会被拷贝到s1中,这样打印出来的s1结尾就是乱码
5、你的变量命名是不规范的,可以百度一下匈牙利命名法则。
再看看我写的代码吧:
#include <stdio.h>
#include <assert.h>
#include <string>
char* STRCPY(char* dest, const char* src){
assert((src != NULL)&&(dest != NULL));
char* pDest = dest;
do{
*dest = *src;
dest++,src++;
}while(*src != '\0');
return pDest;
}
int main(int argc, char** argv){
char szBuf[80] = "youdalfaoduandljfaa";
char szBuf1[80] = {0};
STRCPY(szBuf1, szBuf);
printf("%s\n%s\n", szBuf, szBuf1);
return 0;
}
这是一道比较经典的C笔试题,考点全在STRCPY函数里面,考点分为:
1、STRCPY必须返回char*
2、要有断言,对入参进行判断
3、copy循环体
------解决思路----------------------
判断参数?有必要吗?误人子弟啊!
自己看看strcpy的实现吧!
------解决思路----------------------
最后目标字符串里尾巴得加个'\0'吧。或者你这样初始化char str[80] = {0};
断点调试就是在需要断点的地方按个F9,然后F5执行,F10单步执行,这时候自己观察监视器里每个变量的实时的数值啊,从而对是哪步出差错了可以很快的判别出来,F11进入函数,可以自己更直观的了解程序的执行流程。
------解决思路----------------------
scanf, fscanf, sscanf, scanf_s, fscanf_s, sscanf_s
下面有一段话:4-6) Same as (1-3), except that %c, %s, and %[ conversion specifiers each expect two arguments (the usual pointer and a value of type rsize_t indicating the size of the receiving array,……
意思是%c, %s, 和 %[,后面对应两个参数:一个指针和指示此数组大小的值
你的scanf_s后面少个参数80