關於cstrncpy,c strcpy 和 是strncpy區別

2022-03-19 07:08:44 字數 2844 閱讀 4485

1樓:

char* ch = "12345678";

"12345678"後還有個空字元

而strncpy(ch5,ch,5);只copy了ch前5個字元,即12345,沒有空字元

因為strncpy本身就是為了替換掉字串中的某一串字元,只是前面的替換成了12345

當用cout輸出時,遇到空字元結束

在輸出ch5時陣列後面的都不是空字元(未初始化),所以輸出亂碼·直到遇到空字元為止(位置未定)··

2樓:夢想窗外

操作字串時,不要忘了給最後的'\0'分配空間,不然輸出時就會帶著亂碼,正確的做法是:

char *ch2 = new char[6];

strncpy(ch2, ch3, 5);

ch2[5] = '\0';

cout << ch2 << endl;

不能少了這句

delete ch2;

之所以出現亂碼,是因為執行strncpy的過程中並沒有將字串結束符'\0'賦值給目標,目標字串沒有結束符輸出時自然就不知道應該什麼時候停止輸出,除非遇到'\0'字元,因此你會看到亂碼,就這樣。

3樓:匿名使用者

分析下strncpy的源**應該就明白了 ,庫函式並沒有對dest檢查,有可能dest不是以'\0'結尾, 輸出的時候就會出錯了

char * __cdecl strncpy (char * dest,

const char * source,

size_t count)

4樓:匿名使用者

一樣的意思。

問題出在:

ch1是15+1個字元,但是只有5個賦值了,所以剩下的是亂碼。

c++strcpy 和 是strncpy區別

5樓:千鋒教育

strcpy和strncpy的區別

第一種情況:

char* p="how are you ?";  char name[20]="abcdefghijklmnopqrs";  strcpy(name,p); //name改變為"how are you ? "====>正確!

  strncpy(name,p, sizeof(name));//name改變為"how are you ?" *****>正確!後續的字元將置為null

第二種情況:

char* p="how are you ?";

char name[10];

strcpy(name,p); //目標串長度小於源串,錯誤!

name[sizeof(name)-1]='\0'; //和上一步組合,彌補結果,但是這種做法並不可取,因為上一步出錯處理方式並不確定

strncpy(name,p,sizeof(name)); //源串長度大於指定拷貝的長度sizeof(name),注意在這種情況下不會自動在目標串後面加'\0'  name[sizeof(name)-1]='\0'; //和上一步組合,彌補結果

6樓:鐳毅

char *strncpy(

char *strdest,

const char *strsource,size_t count

);char *strcpy(

char *strdestination,const char *strsource);兩者功能基本一樣。不同之處在於,strncpy多乙個引數 count,即複製的位元組數

c/c++中strcpy和strncpy的區別

7樓:風若遠去何人留

strcpy 複製到字串結束符\0為止。

strncpy比strcpy多了乙個引數n,當複製數量達到n或者遇到\0這兩個都會導致複製結束。

所以 strncpy可以確保不會溢位,更安全一些。

c++ 關於string , strncpy是否會在結尾自動新增'\0'的問題

8樓:匿名使用者

strlen和sizeof作用於string通過字串化c_str()得出的字串結果都是一樣的。所以用strlen時通過+1使得strncpy將最後乙個結尾符拷貝過去了,但是用sizeof的時候沒有+1,結果就沒有最後的結尾符拷貝到p裡面,輸出沒有碰到結尾符,才會亂碼。

strncpy在msdn上的解釋是:

當函式的第三個引數小於等於第二個引數的長度時,空字串不會被加到引數一的結尾。

當函式的第三個引數大於第二個引數的長度時,引數一copy完字串後到整個空間結束全部被置為空字元。

string自己提供了獲取長度和容量的成員函式

str1.length();    // 獲取長度

str1.capacity();  // 獲取容量

至於c_str()得到的東西到底是怎樣的。看原始碼注釋是說帶有結尾字元的常量字串,但是為什麼在strlen和sizeof操作下和c語言的char陣列不同這一點的確不太好解釋。

你再查查其他資料,如果知道原因了,順便也告訴下我...

9樓:

string的實現各不相同,建議不要用 strcpy之類的函式,有些使用了'\0',有些'\0'是被隱藏的

直接使用string::assign 等string提供的函式比較保險

比如char str1 = "hello"

std::string str2(str1);

std::string str3;

str3.assign(str1, str1 + strlen(str1));

c++中的strcpy_s使用問題

關於ZIPPO關於zippo

世界上從來沒有第二個牌子的打火機象zippo那樣擁有眾多的故事和回味。對於很多男士來說,zippo打火機是他們的至愛和樂此不疲的話題,同時也是他們邁向成熟男人的標誌 對於女士,在心愛的男人生日那天送給他一支zippo,也許就可以獲得他的信賴和關愛。世界知名的zippo打火機,71載不變的設計和品牌策...

關於ACCA,關於acca

acca是是世界上領先的專業會計師團體,也是國際學員最多 學員規模發展最快的專業會計師組織。其實,無論cpa還是acca,對於無經驗的人求職來說都只是乙個敲門磚而已。如果只想找個穩定點的工作也沒有什麼高管志向,那考cpa或acca都無所謂,找工作是不愁了。但如果是外企,如果想要往上走,如果對出國有用...

關於四季,關於古代詩人,關於現代詩人,關於外國詩人的詩

古代 柳永 雨霖鈴 寒蟬淒切,對長亭晚,驟雨初歇。都門帳飲無緒,留戀處,蘭舟催發。執手相看淚眼,竟無語凝噎。念去去 千里煙波,暮靄沉沉楚天闊。多情自古傷離別,更那堪 冷落清秋節。今宵酒醒何處,楊柳岸 曉風殘月。此去經年,應是良辰 好景虛設。便縱有 千種風情,更與何人說。辛棄疾 破陣子 醉裡挑燈看劍,...