c语言向文件中写入字符串_C语言中定义字符串的两种方式及其比较
先看如下代碼:
以上用兩種方式定義一個(gè)字符串:
1、定義一個(gè)char * 類型指針,指向字符串首字符首地址。
2、定義一個(gè)數(shù)組,數(shù)組里存放元素為字符串各個(gè)字符+'0',其中'0'為碼0值,編譯器會(huì)自動(dòng)在字符串的末尾添加此值。
先看這兩個(gè)"變量"分別是存在內(nèi)存的哪個(gè)區(qū)域,(后面可知string1為常量)修改代碼如下,打印這兩個(gè)“變量”的內(nèi)存地址,查看運(yùn)行結(jié)果:
查看進(jìn)程的內(nèi)存分布情況,(詳情請(qǐng)查看:RobotCode俱樂(lè)部:手撕虛擬內(nèi)存(1)——字符串在虛擬內(nèi)存中的段位置與/proc虛擬文件系統(tǒng)),string1內(nèi)存首地址為0x80485a0,string2內(nèi)存首地址為0bfaebfd8。如下圖,可知這兩種定義方式,一種位于只讀區(qū)(0x8048000 < 0x80485a0 < 0x8049000),一種位于Stack區(qū)(0xbfacd000 < 0bfaebfd8 < 0xbfaee000)。可知,string1為常量(只讀的,權(quán)限為r),在編譯時(shí)就確定了。string2存放在棧上,運(yùn)行時(shí)確定。這也決定了,定義string1的方式適用于定義字符串常量,string2方式適用于字符串變量可能需要被修改的情況。同時(shí)需要注意的是,未必定義在函數(shù)體里的“變量”都會(huì)分布在棧上,如這里的字符串常量,及static修飾的局部變量,他們都是分布在全局靜態(tài)區(qū),由編譯器在編譯時(shí)決定,而非函數(shù)運(yùn)行時(shí)動(dòng)態(tài)分配。另外全局靜態(tài)區(qū)的變量生命期與整個(gè)進(jìn)程的生命期相同,大于等于函數(shù)的生命期。
總結(jié)
以上是生活随笔為你收集整理的c语言向文件中写入字符串_C语言中定义字符串的两种方式及其比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算机高一基础知识大全,计算机基础知识大
- 下一篇: Rose双机热备两款软件原理介绍以及共享