亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++警告:不建議將字符串常量轉換為'char *'[-Wwrite-strings]

C ++警告:不建議將字符串常量轉換為'char *'[-Wwrite-strings]

C++
Smart貓小萌 2019-11-19 14:34:51
我正在使用gnuplot在C ++中繪制圖形。該圖形正在按預期方式繪制,但是在編譯過程中會出現警告。警告是什么意思?warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]這是我正在使用的功能:void plotgraph(double xvals[],double yvals[], int NUM_POINTS){    char * commandsForGnuplot[] = {"set title \"Probability Graph\"",         "plot     'data.temp' with lines"};    FILE * temp = fopen("data.temp", "w");    FILE * gnuplotPipe = popen ("gnuplot -persistent ", "w");    int i;    for (i=0; i < NUM_POINTS; i++)    {        fprintf(temp, "%lf %lf \n", xvals[i], yvals[i]);         //Write the data to a te  mporary file    }    for (i=0; i < NUM_COMMANDS; i++)    {        fprintf(gnuplotPipe, "%s \n", commandsForGnuplot[i]);         //Send commands to gn  uplot one by one.    }    fflush(gnuplotPipe);}
查看完整描述

2 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

字符串文字是const char的數組,我們可以從C ++標準草案的2.14.5 字符串文字中看到這一點,文字(強調我的):


普通字符串文字和UTF-8字符串文字也稱為窄字符串文字。窄字符串文字的類型為“ n of const char數組”,其中n是下面定義的字符串的大小,并且具有靜態存儲持續時間(3.7)。


因此此更改將刪除警告:


const char * commandsForGnuplot[] = {"set title \"Probability Graph\"", "plot     'data.temp' with lines"};

^^^^^

注意,允許* non-const char **指向const數據是一個壞主意,因為修改const或字符串文字是未定義的行為。我們可以通過轉到7.1.6.1 cv-qualifiers部分看到這一點:


除了可以聲明任何聲明為可變的類成員(7.1.1)之外,任何在其生存期(3.8)內修改const對象的嘗試都會導致未定義的行為。


和2.14.5 字符串文字部分,內容為:


是否定義了所有字符串文字(即存儲在不重疊的對象中)都是實現定義的。嘗試修改字符串文字的效果是不確定的。


查看完整回答
反對 回復 2019-11-19
  • 2 回答
  • 0 關注
  • 1699 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號