zoukankan      html  css  js  c++  java
  • C语言char*用scanf读入的问题

    昨晚主席问了我一个问题,让我注意到了C语言的一个细节,原题如下。

    首先A的语法不对,B的''问题不必多说,D是一定对的,问题在C上。

    乍一看感觉C和D好像没什么区别,就在本地clion中试了一下,发现也没有问题。

    但是在服务器环境下试了一下,报错段错误。

    百度题库给的解释是:指针s未赋初值,所以指向一个不确定的地址,因而不能用scanf输入数据到这一指针所指向的地址。

    这里有一个解决办法,就是先用malloc分配内存,之后用free释放掉,具体如下。

    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    int main(int argc,char** argv){
        char* s;
        s=(char*)malloc(sizeof(char));
        scanf("%s",s);
        puts(s);
        free(s);
        return 0;
    }
    

    至于为什么在clion中就可行呢?我个人推测(不一定对)是因为gcc版本问题,linux发行版自带gcc普遍版本较低,用gcc -v查看发现是4.x版本,而本地windows端是8.x版本。高版本gcc可能做了优化,屏蔽掉了这个问题。

    另外如果想要升级gcc,可参考如下教程。感觉挺繁琐的,而且很多地方都要设置镜像以提高下载速度,所以我暂时就没有理会了。

    https://itbilu.com/linux/management/V1vdnt9ll.html

  • 相关阅读:
    学习笔记5_Day09_网站访问量统计小练习
    学习笔记4_ServletContext(重要整个Web应用的动态资源之间共享数据)
    学习笔记03_Day09-----Servle与反射()
    学习笔记2_Day09_servlet的细节
    学习笔记1_Day09_Servlet
    OC对数组排序的方法
    sqlite事务处理
    封装数据库
    JsonModel的使用
    RBAC表
  • 原文地址:https://www.cnblogs.com/wzgg/p/14187497.html
Copyright © 2011-2022 走看看