首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 手寫 strcat、strlen、strcmp 並正確輸出結果

     編輯:程式設計疑難解答

常見錯誤:返回 void 卻嘗試 cout << strcat(...)

strcat 標準庫返回 char*(目的指標),以支援鏈式調用。自寫版本需同樣返回 char*。

標準 strcat 參考實現

char* my_strcat(char* dest, const char* src) {
    char* ret = dest;                 // 保存起始位址供返回
    while (*dest) dest++;             // 移至 dest 結尾 '\0'
    while ((*dest++ = *src++)) ;      // 複製 src 含 '\0'
    return ret;                       // 鏈式調用關鍵
}

strlen 與 strcmp 實現

size_t my_strlen(const char* s) {
    size_t len = 0;
    while (s[len]) len++;
    return len;
}

int my_strcmp(const char* s1, const char* s2) {
    while (*s1 && (*s1 == *s2)) { s1++; s2++; }
    return *(const unsigned char*)s1 - *(const unsigned char*)s2;
}

正確輸出用法

char s1[100] = "Hello";
char s2[] = "World";

cout << my_strcat(s1, s2) << ' ' << my_strlen(my_strcat(s1, s2)) << endl;
// 輸出:HelloWorld 10

cout << my_strcmp("abc", "abd") << endl; // 負值
cout << my_strcmp("abc", "abc") << endl; // 0

關鍵點總結

  • strcat 返回 char*,不可聲明為 void。
  • strlen 返回 size_t(無號),格式化輸出用 %zu 或 cout。
  • strcmp 返回 int(負/0/正),直接 cout 即可。
  • 實參陣列需足夠大(dest 容量 ≥ 原長度 + src 長度 + 1),否則緩衝區溢出。

手寫標準庫函數是理解指標、記憶體佈局、返回值約定的絕佳練習。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved