为什么会访问冲突?

枯木生花 2015-09-09 09:52:48
新手。。。。
#include <stdio.h> ;
struct fullname
{
char fname[20];
char lname[20];
};
struct bard
{
fullname name;
int born;
int died;
};
bard willie;
bard * pt = &willie;
int main(void)
{
scanf("%d\n",&willie.born);
scanf("%d\n",&pt->born);
scanf("%s\n",&willie.name.lname);
scanf("%s\n",&pt->name.lname);
/*int b=willie.name.lname*/
printf("%s\n",pt->name.lname[2]);
getchar();
};
...全文
216 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
苏叔叔 2015-09-12
  • 打赏
  • 举报
回复
引用 6 楼 linfengc 的回复:
这年头怎么还在搞c啊. 直接c++ primer搞起. stl搞起, boost搞起. 学盖房子也别学怎么烧砖...
不会c的c++程序员,不是好的c++程序员
苏叔叔 2015-09-10
  • 打赏
  • 举报
回复
修改如下:

#include <stdio.h>
struct fullname
{
	char fname[20];
	char lname[20];
};
struct bard
{
	struct fullname name;
	int born;
	int died;
};
struct bard willie;
int main(void)
{
	scanf("%d", &willie.born);
	scanf("%d", &willie.died);
	scanf("%s", willie.name.fname);
	scanf("%s", willie.name.lname);
	printf("name.fname=%s,name.lname=%s,born=%d,died=%d\n", willie.name.fname, willie.name.lname, willie.born, willie.died);
	return 0;
};
初見的畫面 2015-09-10
  • 打赏
  • 举报
回复
话说输入的时候为什么要用换行符呢? ‘\n’这个东西是干嘛的?
fastkb 2015-09-10
  • 打赏
  • 举报
回复
我的编译器能提示这种错误code blocsk.
heroesjun 2015-09-10
  • 打赏
  • 举报
回复
引用 6 楼 linfengc 的回复:
这年头怎么还在搞c啊. 直接c++ primer搞起. stl搞起, boost搞起. 学盖房子也别学怎么烧砖...
c++能用来开发单片机吗?
宋寒松 2015-09-10
  • 打赏
  • 举报
回复

#include <stdio.h>

struct fullname {
    char fname[20];
    char lname[20];
};

struct bard {
    struct fullname name;
    int born;
    int died;
};

struct bard willie;
struct bard *pt = &willie;

int main(void)
{
    scanf("%d\n", &willie.born);
    scanf("%d\n", &pt->born);
    scanf("%s\n", willie.name.lname);
    scanf("%s\n", pt->name.lname);

    printf("%s\n", pt->name.lname);

    getchar();
    return 0;
}
linfengc 2015-09-10
  • 打赏
  • 举报
回复
这年头怎么还在搞c啊. 直接c++ primer搞起. stl搞起, boost搞起. 学盖房子也别学怎么烧砖...
赵4老师 2015-09-10
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。 printf里面的%和变量的一一对应关系 scanf里面的%和变量以及变量前加不加&的一一对应关系 是C代码中非常容易出错的地方,而且通常编译还不出错。 所以在编译源代码之前值得专门仔细检查一遍甚至多遍。
wq327 2015-09-10
  • 打赏
  • 举报
回复
所有的scanf把取地址符号都去掉试试
二班的码农 2015-09-09
  • 打赏
  • 举报
回复
当然冲突了,lname[2]是一个字符,%s输出一个字符串,printf在输出时,会将这个字符的值转成地址,而且遇'\0'结束,所以会崩溃

69,371

社区成员

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

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