C++报错:引发了异常: 写入访问权限冲突。 **p** 是 nullptr。

George_RED 2019-03-18 06:13:36
原题目 实现一个学生信息处理程序。输入:姓名,年龄,学号(整数),第一学年平均成绩,第二学年平
均成绩,第三学年平均成绩,第四学年平均成绩。输出:姓名,年龄,学号,四年平均成绩。例如:
输入:Tom,18,7817,80,80,90,70
输出:Tom,18,7817,80
要求实现一个代表学生的类,并且所有成员变量都应该是私有的。
下面是我的源代码,
#include<iostream>
#include<cstring>
#include<cstdio>
#pragma warning( disable : 4996)

using namespace std;

class CSstudent {
private:
int age, id;
char name[20];
int averageScore[4];
public:
double average() {
int sum = 0;
for (int i = 0; i < 4; ++i)
sum += averageScore[i];
return sum = sum / 4;
}
void printInfo() {
cout << name << age << id << average();
}
void readInfo() {
char buf[110];
cin.getline(buf, 100);
char * p = strchr(buf, ',');
p[0] = 0; //这里出现异常,写入访问权限冲突,p是nullptr。
strcpy(name, buf);
sscanf(p + 1, "%d,%d,%d,%d,%d,%d", &id, &age,
averageScore, averageScore + 1, averageScore + 2, averageScore + 3);

}
};
int main()
{
CSstudent s;
s.readInfo();
s.printInfo();
return 0;
}
...全文
2584 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
George_RED 2019-03-19
  • 打赏
  • 举报
回复
引用 10 楼 niiiloc 的回复:
呵呵,没有输入怎么走到sscanf的?
嗯 今天试了一下没有问题了,谢谢了
636f6c696e 2019-03-19
  • 打赏
  • 举报
回复
呵呵,没有输入怎么走到sscanf的?
George_RED 2019-03-18
  • 打赏
  • 举报
回复
引用 8 楼 niiiloc的回复:
你的用例输入是什么?是否输入了中文的逗号? 实例用例不会报这个错 [quote=引用 7 楼 George_RED 的回复:] [quote=引用 4 楼 niiiloc 的回复:] char *strchr(const char* _Str,char _Val) char *strchr(char* _Str,char _Ch) 头文件:#include <string.h> 功能:查找字符串_Str中首次出现字符_Val的位置 说明:返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。 返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL 所以使用后一定要判空
我在后面加了一句判空条件 if(p!=NULL) p[0] = 0; 但是又出现了新的bug,刚刚去百度了一下并没有找到答案, 新的bug是 #else { return __stdio_common_vsscanf( //这里引发了异常: 读取访问权限冲突。 **it** 是 0x1。 _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, _Buffer, (size_t)-1, _Format, _Locale, _ArgList); } #endif[/quote][/quote] 没有输入,就是调试的时候就显示错误了,头文件的什么细节问题可能?
636f6c696e 2019-03-18
  • 打赏
  • 举报
回复
你的用例输入是什么?是否输入了中文的逗号? 实例用例不会报这个错
引用 7 楼 George_RED 的回复:
[quote=引用 4 楼 niiiloc 的回复:] char *strchr(const char* _Str,char _Val) char *strchr(char* _Str,char _Ch) 头文件:#include <string.h> 功能:查找字符串_Str中首次出现字符_Val的位置 说明:返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。 返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL 所以使用后一定要判空
我在后面加了一句判空条件 if(p!=NULL) p[0] = 0; 但是又出现了新的bug,刚刚去百度了一下并没有找到答案, 新的bug是 #else { return __stdio_common_vsscanf( //这里引发了异常: 读取访问权限冲突。 **it** 是 0x1。 _CRT_INTERNAL_LOCAL_SCANF_OPTIONS, _Buffer, (size_t)-1, _Format, _Locale, _ArgList); } #endif[/quote]
George_RED 2019-03-18
  • 打赏
  • 举报
回复
引用 4 楼 niiiloc 的回复:
char *strchr(const char* _Str,char _Val)
char *strchr(char* _Str,char _Ch)
头文件:#include <string.h>
功能:查找字符串_Str中首次出现字符_Val的位置
说明:返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。
返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL

所以使用后一定要判空

我在后面加了一句判空条件
if(p!=NULL)
p[0] = 0;
但是又出现了新的bug,刚刚去百度了一下并没有找到答案,
新的bug是
#else
{
return __stdio_common_vsscanf( //这里引发了异常: 读取访问权限冲突。
**it** 是 0x1。
_CRT_INTERNAL_LOCAL_SCANF_OPTIONS,
_Buffer, (size_t)-1, _Format, _Locale, _ArgList);
}
#endif
George_RED 2019-03-18
  • 打赏
  • 举报
回复
引用 3 楼 sdghchj 的回复:
strchr是字符查找,找不到的时候就返回空指针,空指针不能进行下标索引操作
嗯谢谢,我去试试
George_RED 2019-03-18
  • 打赏
  • 举报
回复
引用 2 楼 真相重于对错 的回复:
建议学会调试程序,具体查BAIDU
谢谢最近才开始自学c++,有些地方学的不是那么的清楚
636f6c696e 2019-03-18
  • 打赏
  • 举报
回复
char *strchr(const char* _Str,char _Val) char *strchr(char* _Str,char _Ch) 头文件:#include <string.h> 功能:查找字符串_Str中首次出现字符_Val的位置 说明:返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。 返回值:成功则返回要查找字符第一次出现的位置,失败返回NULL 所以使用后一定要判空
sdghchj 2019-03-18
  • 打赏
  • 举报
回复
strchr是字符查找,找不到的时候就返回空指针,空指针不能进行下标索引操作
真相重于对错 2019-03-18
  • 打赏
  • 举报
回复
建议学会调试程序,具体查BAIDU
George_RED 2019-03-18
  • 打赏
  • 举报
回复
大致意思好像是p是空指针,好像就不能给他赋值?我也不是很清楚,特意请教各位。

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧