C語言中strcpy函式的引數不能是字元指標嗎

時間 2021-09-20 16:08:29

1樓:匿名使用者

象char *p="1234567"這種字串指標指向的是字串常量, 常量不能被修改,所以不能象你上面那樣來寫,需要改為char p="1234567";

注:也因為同樣的原因,所以象

char *p="1234567";

p[0]='a'; 或者 *p='a'

這種也都是不行的

2樓:陽光的雷咩咩

p指向的是常量字串,不可修改

3樓:岔路程式緣

strcpy(string1,string2);

是把第二個字串寫到第一個字串的地址上,從而代替第一個字串,實現字串複製的作用。

這就要求第一個字串string1是能夠改寫的!

我們看一看你定義的第一個字串char *p="1234567";,這個語句首先建立一個字元指標p,再在常量區建立一個字串“1234567”(注意常量區的資料是不能改寫的),然後把首字元'1'的地址賦值給p。

這樣建立的字串p(它只能存放一個地址),只能把所謂的p字串讀出來,而不能往裡寫字元或修改,因為它的字元們都在常量區呢。

所以,系統無法寫入p地址的記憶體中,造成複製不成功。

因此,strcpy()函式的第一個引數不能使用字元指標。類似的情況還有strcat函式。

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

4樓:風若遠去何人留

是允許先定義後賦值的

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

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

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

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

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

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

5樓:匿名使用者

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'也要一個位元組)。

6樓:

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”。

7樓:oo靈兒

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

8樓:匿名使用者

a 不用說肯定是對的。

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

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

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

b 肯定是不對的。

c語言中strcpy函式怎麼用?看題

9樓:

您好,輸出結果為“a2yz”。

程式**:

分析:

strcpy(a+1,b+2)相當於將a[1]及它後面的內容複製為b[2]及它後面的內容。b[2]及後面為“2”,因此複製後a為“a2”;

strcat(a,c+1)相當於在a的末尾加上c[1]及其後面的部分,也就是“yz”。故執行後a為“a2yz”

拓展資料:

strcpy把從src地址開始且含有'\0'結束符的字串複製到以dest開始的地址空間,返回值的型別為char*。

strcat把src所指向的字串(包括“\0”)複製到dest所指向的字串後面(刪除*dest原來末尾的“\0”)。

10樓:匿名使用者

strcpy(a+1,b+2);

把 b[2]開始的字串拷貝到 a[1]開始的地址中。

這時 a 中的字串改變為 "a2"

然後將 c[1]開始的字串拼接到a 中

此時 a中的字串變為 a2yz;

11樓:匿名使用者

strcpy 將第二個拷貝到第一個 即拷完以後a為a2\0 注意每個字串最後都有個\0 然後 strcat 後a就是"a2yz"

最終輸出結果為"a2yz"

12樓:黃萱

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”。

最後用puts輸出字串。

不懂請追問,望採納。

c語言中strcpy函式的問題

13樓:匿名使用者

strcpy()函式只能拷貝字串。strcpy()函式將源字串的每個位元組拷貝到目錄字串中,當遇到字串末尾的null字元(\0)時,它會刪去該字元,並結束拷貝

14樓:千鋒教育

strcpy是複製字元陣列執行完後目標陣列arr2被覆蓋

也就是arr2成了"abcde",所以strlen函式返回還是5

15樓:覃寞

char arr2[5] = "hello";這樣是無法通過編譯的,因為最後有一個\0

應該是arr2[6]

16樓:苦澀無人愛

strcpy(s1,s2)其中s1的長度必須大於s2的,否則記憶體戳穿發生錯誤,其次把s2copy到s1後系統會在後面新增\0,計算長度時仍會考慮複製後的\0

17樓:匿名使用者

怎麼不是'\0',strcpy會把'\0'也複製過來的

c語言strcpy用法,c語言中strcpy函式幹什麼用的

飛喵某 2 接著定義兩個陣列a和b,程式經過strcpy函式處理,將b陣列中的字串複製到a陣列中,最後列印出結果 3 最後來看看效果。開啟除錯視窗,輸入一句話,按下回車輸出了這句話。以上就是c語言中strcpy的用法 例如 定義一個字串char a 20 和一個字串c i am a teacher ...

c語言中的strcpy是什麼意思

綉乞群群 c語言標準庫函式strcpy,把從src地址開始且含有null結束符的字串複製到以dest開始的地址空間。直觀表示為strcpy 狗,賦值內容 實現對文字變數 狗 的賦值,以區別於普通數字的形式賦值。原型宣告 extern char strcpy char dest,const char ...

c語言中函式指標用法,C語言中函式指標用法

函式在記憶體中有一個物理位置,而這個位置是可以賦給一個指標的。一零點函式的地址就是該函式的入口點。因此,函式指標可被用來呼叫一個函式。函式的地址是用不帶任何括號或引數的函式名來得到的。這很類似於陣列地址的得到方法,即,在只有陣列名而無下標是就得到陣列地址。怎樣說明一個函式指標變數呢 為了說明一個變數...