C語言char*用scanf讀入的問題


昨晚主席問了我一個問題,讓我注意到了C語言的一個細節,原題如下。

首先A的語法不對,B的'\0'問題不必多說,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM