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都無所謂,找工作是不愁了。但如果是外企,如果想要往上走,如果對出國有用...
關於四季,關於古代詩人,關於現代詩人,關於外國詩人的詩
古代 柳永 雨霖鈴 寒蟬淒切,對長亭晚,驟雨初歇。都門帳飲無緒,留戀處,蘭舟催發。執手相看淚眼,竟無語凝噎。念去去 千里煙波,暮靄沉沉楚天闊。多情自古傷離別,更那堪 冷落清秋節。今宵酒醒何處,楊柳岸 曉風殘月。此去經年,應是良辰 好景虛設。便縱有 千種風情,更與何人說。辛棄疾 破陣子 醉裡挑燈看劍,...