c選項中,C語言不是允許字串指標先定義後賦值的嗎,求指點使用strcpy函式後有什麼區別

時間 2021-05-09 21:05:34

1樓:風若遠去何人留

是允許先定義後賦值的

不過 從下面這幾個看 其實嚴格來說 只有a是對的。 bcd三個都有問題。

astring2是新的值,賦值給s1 這個完全沒有問題,。

b s4指向的是常量字串, 這個是常量區的,不允許修改,出現賦值,直接會導致程式崩潰

c s3只是定義了字元指標,沒有分配空間。 對s3賦值, 一樣會導致程式崩潰

d s2沒有初始化,內部為隨機值,而strcpy是遇到\0才停止,所以 這個操作是有可能導致越界的。 於是這個是不確定結果。

c語言strcpy()函式和指標的題目

2樓:匿名使用者

strcpy(char a*, char b*)的作用,簡單講就是給你兩個記憶體起始位址(你可以將它們想象成給了你兩排箱子,每個箱子都有編號,比如第一排的編號是0,1,2,3,4,第二排的編號是7,8,9,則a,b分別就是這兩排箱子的起始編號),將以b開始的記憶體位址中的資料複製到以a開始的記憶體位址中(就是將箱子7中的東西複製到箱子0,將箱子8中的東西複製到箱子1,...)。因為a要容納b的所有資料,所以分配給a的記憶體數量必須大於等於分配給b的記憶體數量(大於意味著a的記憶體沒裝滿,有富餘空間),即第一排箱子的數量要大於第二排的。

具體到你的問題,箱子的數量就是分配給陣列或字元指標的記憶體位元組數。str1和str4都分配了9個位元組,因為把字串分配給char陣列(陣列的大小沒由你顯式指定時才這樣)或char指標時,會比字串的實際長度多分配1個位元組,以容納'\0'字元,str2是8個位元組(8是顯式指定的),而str3乙個位元組也沒分配,所以不能把"hell03"複製給str3,因為要裝下"hell03",需要至少7個位元組('\0'也要乙個位元組)。

3樓:

strcpy(char *, char *)函式表示將第二個引數開始的字串拷貝到第乙個引數的字串位置。故strcpy (a+1, b+2) 表示將b[2]開始的字串複製到a[1]開始的字串中,即a陣列變為「a2」。 strcat(char *, char *)函式表示將第二個引數開始的字串接到第乙個引數開始的字串上,返回第乙個字串的指標。

故strcat(a,c+1)表示將c[1]開始的字串接到「a2」後面,a陣列變成「a2yz」。

4樓:oo靈兒

str3定義了但是沒有初始化,你可以理解成起了個名字但是沒有分配記憶體,所以不能進行複製字串操作

5樓:匿名使用者

a 不用說肯定是對的。

b str3的值是乙個無效的指標,無疑是錯的。

c str4 指向的是乙個字串常量,通常情況下是能修改的,按照這種情況是錯的。但也有你例外,不同的平台也有可能字串也是可以修改的。按照這種情況就是對的。

所以 c 的對錯是看情況的。

b 肯定是不對的。

c語言程式設計不是c哦,C語言和C 語言的區別是什麼?

include int main return 1 額 你這是要幹嘛?c語言和c 語言的區別是什麼? 小張 c語言與c 的區別有很多 1,全新的程式程式思維,c語言是面向過程的,而c 是物件導向的。2,c語言有標準的函式庫,它們鬆散的,只是把功能相同的函式放在乙個標頭檔案中 而c 對於大多數的函式都...

C語言if判斷的格式,C語言程式設計中if語句的格式是什麼?

if a b a c a d a e a f a g b c b d b e b f b g c d c e c f c g d e d f d g e f e g f g 上面比較笨的寫法了,執行效率還可以 include stdio.h int a 1,b 2,c 3,d 4,e 5,f 6,g...

為什麼c語言是程式語言之母,C語言是不是所有程式設計的基礎啊!!

c語言是一門程式語言,但並不是程式語言之母,算是高階語言之母了,很經典 c語言最主要的特點是 簡單易學,通俗易懂 而且,是各種高階語言的基礎,在學其他語言時,你會感覺很熟悉,學著也通俗易懂,可以說,其他變語言是c語言的特殊化罷了 但大部分知識都與c大致相同 這只是一種說法。有人在程式語言中,有兩個高...