| 3分 |
F11
代码有bug,如果输入超过80个字符怎么办? |
| 5分 |
没有问题
F10 逐过程 F11 逐语句 |
| 5分 |
F9下断点,F5调试运行,这个程序F10单步,鼠标移上去看变量内容
|
|
这个代码有错误,各位看看哪里错误了,编译的结果没有复制成功。 |
|
| 10分 |
单步调试一般用一般就用F10,F11是step in,如果遇到库函数也会进入,比较多余
单步调试可以让你明白你的每一句代码都干了什么,是否达到了你要的效果,当程序最终执行结果和预想的不一致时,就可以利用单步调试排查具体哪一行代码出问题! 看了你的代码让我想起了N年前的我自己,菜鸟一个,我试着copy一下来验证,唉,copy完我就后悔了,还不如自己重写一遍。 再看看我写的代码吧:
#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函数里面,考点分为: |
|
VS有带文档,告诉你怎么用调试器。
|
|
|
恩,5楼说的很好,第四点,你用<=,所以还算ok吧
|
|
|
恩,5楼说的很好
|
|
|
感谢倾心回复,感觉出来前辈的用心回复! |
|
| 2分 |
判断参数?有必要吗?误人子弟啊! |
| 5分 |
最后目标字符串里尾巴得加个””\0″”吧。或者你这样初始化char str[80] = {0};
断点调试就是在需要断点的地方按个F9,然后F5执行,F10单步执行,这时候自己观察监视器里每个变量的实时的数值啊,从而对是哪步出差错了可以很快的判别出来,F11进入函数,可以自己更直观的了解程序的执行流程。 |
|
哪里尾巴加个‘\0’? |
|
#undef __stpcpy
#undef stpcpy
#ifndef weak_alias
# define __stpcpy stpcpy
#endif
/* Copy SRC to DEST, returning the address of the terminating ""\0"" in DEST. */
char *
__stpcpy (dest, src)
char *dest;
const char *src;
{
char *d = dest;
const char *s = src;
/*没有考虑内存重叠的情况*/
do
*d++ = *s;
while (*s++ != ""\0"");
return d - 1;
}
|
|
|
表示看不懂 话说看不懂 |
|
| 10分 |
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 |
|
你不是用一个for循环然后s1[i] = s2[i]吗,循环结束后,目标字符串s1[i] = “”\0″”;把尾巴填上。 |
|
|
问题解决了,是scanf_s后面少个参数80,修改为scanf_s(“%s”,s2,80);就好了!多谢各位大神~
|
|
也不一定是必要的,如果自己传入的参数足够安全的话,可以不用判断入参,但是传个NULL给strcpy,运行就会出错,对入参进行断言判断体现的是严谨性,哪里来的误人子弟一说! |
|
