第二次博客作业
1.目前薄弱的知识点为指针,类,形参与实参,在拼题a上面经常会报出段错误,真的摸不清头脑。
指针是因为上课时没有听到一些内容,没有及时的对此知识点进行攻破。
类现在还在学,现在觉得还不是很会。
形参与实参(指针)的一些错误往往都是因为几个字母的原因导致段错误,但自己却完全不知道哪里出了问题。后来查询出来了段错误的原因(访问了不可访问的内存),但是还是对此有点懵。
2,一道典型的的段错误题目。拼题a练习9函数题第一题。
本题要求编写函数,将输入字符串t中从第m个字符开始的全部字符复制到字符串s中。
函数接口定义:
void strmcpy( char *t, int m, char *s );
函数strmcpy将输入字符串char *t中从第m个字符开始的全部字符复制到字符串char *s中。若m超过输入字符串的长度,则结果字符串应为空串。
裁判测试程序样例:
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 20
void strmcpy( char *t, int m, char *s );
int main()
{
char t[MAXN], s[MAXN];
int m;
cin>>m;
cin.ignore();
cin.getline(t,MAXN);
strmcpy(t,m,s);
cout<<s;
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
7
happy new year
输出样例:
new year
此题因为是一题非常典型的段错误题目,难度不大,大家都应该会做,思路大家的其实都差不多,但是一道简单的题目却让自己充分体验到了段错误的原因与解决方法。
void strmcpy ( char *a, int n, char *b){
for(int i=0;*(a+i)!='\0';i++){
b[i]=a[i+n-1];
}
}
这是自己的解题代码,这样的代码是正确的,但是如果我稍微改一点点,改成:
void strmcpy ( char *a, int n, char *b){
for(int i=0;(a+i)!='\0';i++){
b[i]=a[i+n-1];
}
}
马上题目就变成了段错误。或者代码改为(到底是不是这个忘记了,但是应该是):
void strmcpy ( char *a, int n, char *b){
for(int i=0;*a!='\0';i++){
b[i]=a[i+n-1];
}
}
拼题a上显示也是段错误,但是上述两种方法在本地都能够运行并且得到答案。
因为自己的几个段错误的方法都是因为没有用指针接受数据。从而导致了段错误。