官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 36|回复: 3

打印函数无法正常显示

[复制链接]

4

主题

7

帖子

42

积分

新手上路

Rank: 1

积分
42
发表于 2019-10-3 13:14:53 | 显示全部楼层 |阅读模式
注意:如果点击空白处无法输入,则点击字会有输入提示符 | 则可以使用键盘进行输入!

此板块为  [ARM裸机加强版]
  • 问题所在章节:第11课第3节
  • 发生问题的运行环境:Mobaxterm
  • 问题发生描述:第三个结构体中的内容打印不出来



  • 输出的错误信息:Segmentation fault (core dumped)


下面是我的程序:

#include <stdio.h>
struct person{
        char *name;  //注意这里加*,因为这里是字符串,它是字符串首地址
        int age;
        char score;
};

int push_test(const char *format, ...)
{
        char *p = (char *)&format;//把format的首地址给了p指针
        int i;
        struct person per;                        //定义一个per指针
        printf("arg1 : %s\n",format); //把format打印出来
       
//=============================
/*指针对连续空间进行操作时:1)取值                                         2)移动指针*/
        p = p + sizeof(char *);                //指针隔过该字节数,跳向堆栈的下一个空间
        i = *((int *)p);                        //把指针强制转换成int型,然后取*p取该指针所指向的值
        printf("arg2 : %d\n",i);  //这里的数据类型根据下面传过来的数据类型进行设置


        p = p + sizeof(int);
        per = *((struct person *)p);
        printf("arg3 : .name =%s,.age =%d,.socre =%c\n",per.name,        per.age,        per.score);

        return 0;

}

int main(int argc, char **argv)
{
        struct person per={"www.100ask.org",10,'A'};        //长字符串加双引号,一个字符单引号,数字不用加
        printf("sizeof(char   )=%ld\n",sizeof(char     ));
        printf("sizeof(int    )=%ld\n",sizeof(int            ));
        printf("sizeof(char  *)=%ld\n",sizeof(char          *));
        printf("sizeof(char **)=%ld\n",sizeof(char         **));


        push_test("abcd",123,per);

        return 0;

}



























代码

代码
回复

使用道具 举报

0

主题

1186

帖子

3623

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3623
发表于 2019-10-3 14:18:51 | 显示全部楼层
编译的时候加上-m32参数

/*
*  push_test.c  V1.0
*  Copyright (c) 2017 Shenzhen 100ask Technology Co.Ltd.All rights reserved.
*  http://www.100ask.org
*  100ask.taobao.com
*
*  测试平台:   ubuntu16.04(64位机器)  gcc -m32 -o push_test  push_test.c
*                                ubuntu9.10 (32位机器)  gcc      -o push_test  push_test.c
*  编译器  :   gcc
*/
我是百问网www.100ask.org答疑助手,有关站务问题请与我联系。
韦东山视频开发板购买店铺https://100ask.taobao.com/
微信公众平台:baiwenkeji
回复 支持 反对

使用道具 举报

4

主题

7

帖子

42

积分

新手上路

Rank: 1

积分
42
 楼主| 发表于 2019-10-3 15:13:26 | 显示全部楼层
本帖最后由 yoka 于 2019-10-3 15:17 编辑

老师,加上之后总是显示这个
book@www.100ask.org:/work/hardware/printf$ gcc -m32 -o push_test push_test.c
In file included from /usr/include/stdio.h:27:0,
                 from push_test.c:2:
/usr/include/features.h:367:25: fatal error: sys/cdefs.h: No such file or directory
compilation terminated.
book@www.100ask.org:/work/hardware/printf$

还是不能运行
回复 支持 反对

使用道具 举报

4

主题

7

帖子

42

积分

新手上路

Rank: 1

积分
42
 楼主| 发表于 2019-10-3 15:57:18 | 显示全部楼层
如果你是高版本的gcc(可能是由于更新内核造成的),可能简单的使用-m32 的时候会提示以下错误(使用别人的历程,自己未曾遇到):





> In file included from /usr/include/stdio.h:28:0,
> from test.c:1:
> /usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
> compilation terminated.




这应该是缺少构建32 位可执行程序缺少的包,使用以下指令安装:
sudo apt-get install libc6-dev-i386
此时应该就没有什么问题了。

参考地址:http://aaronbonner.tumblr.com/po ... g-to-32bit-with-gcc
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2019-10-17 14:10 , Processed in 0.056425 second(s), 10 queries , File On.

Powered by Discuz! X3.3 Licensed

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表