輸入兩個字符串,分別用自定義函數實現:
void str_cat(char* p1, char* p2):拼接 p2 到 p1 末尾int str_cmp(char* p1, char* p2):比較兩字符串,返回差值int str_len(char* p1, char* p2):返回兩字符串總長度運行後顯示:1. 比較結果 2. 拼接後字符串 3. 總長度
str_cat 直接用庫函數 strcat,未體現指針操作邏輯。str_cmp 返回值未在 main 中接收打印。str_len 參數表與聲明不符(聲明兩參數,定義一參數),且未輸出結果。main 中調用順序與輸出要求不符。#include <stdio.h>
// 拼接:p1 需有足夠空間
void str_cat(char *p1, char *p2) {
while (*p1 != '\0') p1++; // 移動到 p1 末尾
while (*p2 != '\0') { // 複製 p2 內容
*p1 = *p2;
p1++; p2++;
}
*p1 = '\0'; // 結束符
}
// 比較:逐字符比較,返回首個不同字符的 ASCII 差值
int str_cmp(char *p1, char *p2) {
while (*p1 != '\0' && *p2 != '\0') {
if (*p1 != *p2) return *p1 - *p2;
p1++; p2++;
}
return *p1 - *p2; // 處理長度不同但前綴相同的情況
}
// 計算兩字符串總長度
int str_len(char *p1, char *p2) {
int n = 0;
while (*p1++ != '\0') n++;
while (*p2++ != '\0') n++;
return n;
}
int main() {
char s1[100] = "hello "; // 須預留足夠空間容納拼接結果
char s2[] = "world!";
// 1. 拼接
str_cat(s1, s2);
printf("拼接結果: %s\n", s1);
// 2. 比較
int cmp = str_cmp("aaa", "ab");
printf("比較結果: %d\n", cmp);
// 3. 總長度
int len = str_len("aaa", "ab");
printf("總長度: %d\n", len);
return 0;
}
拼接結果: hello world!
比較結果: -1
總長度: 5
\0 結尾,指針遍歷核心是 while (*p != '\0')。str_cat 需確保目標緩衝區足夠大,否則緩衝區溢出。str_cmp 返回值語義:< 0 表示 p1 < p2,=0 相等,>0 表示 p1 > p2。