各位大神,我照着书打出来,怎么运行不了,究竟哪里出问题了

chen15902072513 2017-08-20 09:54:19
struct student { int rno ; char name[20];};
void display(struct student *st);
int _tmain(int argc, _TCHAR* argv[])
{
struct student *s;
s->rno=10;
strcpy(s->name,"sunyuhong");
display(s);
return 0;
}
void display(struct student *st)
{
printf("\nrno=%d",st->rno);
printf("\nname=%s",st->name);
}
...全文
216 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chen15902072513 2017-08-23
  • 打赏
  • 举报
回复
感谢各位大神, 问题已解决
jena_wy 2017-08-21
  • 打赏
  • 举报
回复
只有个指针,没有给指针分配空间,就给指针成员变量赋值,所以错误。
自信男孩 2017-08-21
  • 打赏
  • 举报
回复
在main函数里,这句下面加上一句就可以了。
struct student *s;
加:
s = malloc(sizeof(struct student));
原因是你的是野指针操作,需要将s指向可读可写的内存区域,比如malloc申请的堆上空间; 我估计这不是书上的源码,因为这个错误比较明显;书上可能定义的时结构体变量而非指针。
棉猴 2017-08-21
  • 打赏
  • 举报
回复
1 添加头文件 因为代码里使用了printf()函数,因此要添加stdio.h;又因为使用了strcpy()函数,因此要添加Windows.h #include <stdio.h> #include <Windows.h> 2 内存分配 因为代码中使用了自定义结构student的指针,但是没有对该指针分配内存。所以在定义*s时进行如下修改 struct student *s = new student(); 还需要在程序结尾处,即调用了display()函数之后,释放该分配的内存 delete s; 3 安全拷贝函数 代码中的strcpy()字符串拷贝函数容易导致溢出,所以要将其改为安全拷贝函数 strcpy_s(s->name, "sunyuhong"); 修改后的代码如下,VS2015+Windows10 64位,调试通过

#include "stdafx.h"
#include <stdio.h>
#include <Windows.h>
struct student { int  rno; char name[20]; };
void display(struct student *st);


int main()
{
	struct student *s = new student();
	s->rno = 10;
	strcpy_s(s->name, "sunyuhong");
	display(s);
	delete s;
	return 0;
}

void display(struct student *st)
{
	printf("\nrno=%d", st->rno);
	printf("\nname=%s", st->name);
}
hy3615 2017-08-21
  • 打赏
  • 举报
回复
int _"t"main(int argc, _TCHAR* argv[])
qq_39915808 2017-08-20
  • 打赏
  • 举报
回复
不懂不懂不懂不懂不懂

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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