第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

char * str =“ STRING”和char str [] =“ STRING”之間的區(qū)別?

char * str =“ STRING”和char str [] =“ STRING”之間的區(qū)別?

在編寫一個簡單的函數(shù)以從字符串中刪除特定字符的過程中,我遇到了一個奇怪的問題:void str_remove_chars( char *str, char to_remove){    if(str && to_remove)    {       char *ptr = str;       char *cur = str;       while(*ptr != '\0')       {           if(*ptr != to_remove)           {               if(ptr != cur)               {                   cur[0] = ptr[0];               }               cur++;           }           ptr++;       }       cur[0] = '\0';    }}int main(){    setbuf(stdout, NULL);    {        char test[] = "string test"; // stack allocation?        printf("Test: %s\n", test);        str_remove_chars(test, ' '); // works        printf("After: %s\n",test);    }    {        char *test = "string test";  // non-writable?        printf("Test: %s\n", test);        str_remove_chars(test, ' '); // crash!!        printf("After: %s\n",test);    }    return 0;}我不明白為什么第二項測試失敗了?對我來說,它看起來像第一表示char *ptr = "string";相當于這一個:char ptr[] = "string";。是不是這樣
查看完整描述

3 回答

?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

嚴格說來,聲明char *ptr只能保證您指向字符類型。字符串形成已編譯應用程序的代碼段的一部分并不少見,該代碼段將被某些操作系統(tǒng)設置為只讀。問題在于,實際上您從未自己為該字符串顯式創(chuàng)建內(nèi)存時,您就對預定義字符串的性質(zhì)(它是可寫的)進行了假設。編譯器和操作系統(tǒng)的某些實現(xiàn)可能允許您執(zhí)行嘗試做的事情。


另一方面char test[],在這種情況下,根據(jù)定義,聲明實際上為堆棧上的整個字符數(shù)組分配了可讀寫的內(nèi)存。


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關注
  • 1883 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號