日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言中关于字符串常量的进一步分析 转

發布時間:2025/7/14 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中关于字符串常量的进一步分析 转 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請在(且只能在TC2.0)中運行下面代碼,先不要看結果,想想會得到什么:

#include<stdio.h> #include<stdlib.h>// 文章要求代碼在Tc下運行 int main(int argn, char* argv[]) {char* szStringA = "Hello,world!";char* szStringB = "Hello,world!";*szStringA = '-'; // dev下上面的語句在執行過程中異常退出,說明dev并不允許改變字符串常量, dev下,如果查看szStringA 和 szStringB的值的話,這兩個指針的值話,也是一樣的 puts(szStringB);return 0; }

  輸出結果是:"-ello,world!";。是否和你想象的結果不一樣呢? ??
  ANSI ? C明確說明:修改字符串常量,效果是未定義的。 ??
  首先我們得清楚,如何才能得到字符串常量?只有一種方式:char* ? szString ? = ? “Hello,world!”;這個聲明得到一個字符串常量。那么char ? szString[] ? = ? “Hello,world!”;可以嗎?不可以!這樣得到的是字符串變量。好了,回過來,由于ANSI ? C沒有要求編譯器實現者如何具體對字符串常量進行處理,所以有些編譯器會把相同的多個字符串常量看成一個(注意:這種優化僅有可能出現在字符串常量中,不要把泛泛的用于其他類型的常量。如:int ? num1 ? = ? 11;int ? num2 ? = ? 11;雖然是兩個相同的常量,但是修改num1不會影響num2),目的是為了節約內存空間,所以上面的例子中,當修改字符串a時,b也被修改了。從這里可以看出,TC2.0有對字符串常量進行優化,而其他的編譯器(如:DEVC++5.0)不一定也會優化,結果可能是無法通過編譯,或者通過編譯但是結果是垃圾值。由于這些種種不確定因素,我們應盡量避免修改字符串常量。 ??
  如果必須修改字符串就沒有辦法呢?有!一定有!請注意:我們要的效果是修改字符。因此,只需要定義字符串變量,而不是字符串常量。前面說過,可以用數組的方式定義char ? szString[] ? = ? “Hello,world!”;;這樣,在程序中就可以修改字符串了。試試下面代碼: ??? ?

#include<stdio.h> #include<stdlib.h> int main(int argn, char* argv[]) {char szStringA[] = "Hello,world!";char szStringB[] = "Hello,world!";// 這樣其實是聲明了一個數組大小由后面初始化常量決定的字符數組變量 *szStringA = '-';puts(szStringB);return 0; }

這樣的代碼能夠在dev下面運行,而且看起來是修改了一個常量.

轉自:http://blog.csdn.net/andylyc/article/details/2046225

轉載于:https://www.cnblogs.com/Lyush/archive/2013/01/09/2852361.html

總結

以上是生活随笔為你收集整理的C语言中关于字符串常量的进一步分析 转的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。