【STL】C++語言cstring庫之strcpy與strcpy_s

來源:互聯網
上載者:User
// strcpy用法:// 1. 若源長<目標長 --->OK。 // 將源串COPY至目標串(包括結尾符),其它位元組保持不變,// 2. 若源長>目標長 --->溢出報錯。 // 將源串COPY至目標串(包括結尾符),但目標串太短,下標越界而溢出,不正常的字串顯然會在導致運行時異常// 使用原則總結:使用時保證源長<目標長!!void test_strcpy(){char strSource[] = "Sample string";char strDestShort[10];char strDestLong[40];int iSource = sizeof(strSource);int iDestShort = sizeof(strDestShort);int iDestLong = sizeof(strDestLong);// 情況1if (iSource < iDestLong)strcpy(strDestLong, strSource);std::cout << strDestLong << std::endl;// 情況2if (iSource > iDestShort){// strcpy(strDestShort, strSource); 這個樣子會報異常// 用最傳統的方法處理, 當然更好方法用標準庫的函數size_t l = sizeof(strDestShort);for (size_t i(0); i < l - 1; ++i)strDestShort[i] = strSource[i];strDestShort[l - 1] = 0; }std::cout << strDestShort << std::endl;}// strcpy_s用法:// 若源長<目標長 sizeof([min, max])--->OK,但自訂拷貝的字串長度超過目標長度時,會因下標越界而導致運行異常// 若源長>目標長 sizeof任何一方都會發生運行異常,// (有可能是編譯器在copy前會先檢查兩者長度,如果源串較長便會發生警示而退出,因此後續使用sizeof(strlen(strDest)=0)語句已無效)// 使用原則總結:// 1.使用時保證:源長<目標長// 2.長度不能超出szDest長度,建議使用sizeof(szDest)void test_strcpy_s(){char strSource[] = "Sample string";char strDestShort[10];char strDestLong[40];int iSource = sizeof(strSource);int iDestShort = sizeof(strDestShort);int iDestLong = sizeof(strDestLong);// 情況1if (iSource < iDestLong)strcpy_s(strDestLong, iDestLong, strSource);std::cout << strDestLong << std::endl;// 情況2if (iSource > iDestShort)strcpy_s(strDestShort, iDestShort, strSource); // 這個樣子會報異常std::cout << strDestShort << std::endl;}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.