將 str1 中下標為偶數的字符 (0,2,4...) 依次拷貝到 str2,並寫入文件 out1.dat。
for (i=1; i=='\0'; i++) { // ① 條件判斷錯誤:i=='\0' 永假 (i 是 int),循環不執行
j = 2;
str2[i] = str1[j];
return str2[i]; // ② 函數返回類型 void,不能 return 值
}
#include
#include
void nono(const char *str) {
FILE *f = fopen("out1.dat", "w");
if (f) {
fprintf(f, "%s\n", str);
fclose(f);
}
}
void fun(const char *str1, char *str2) {
size_t i = 0, j = 0;
// 複製 str1[0]
if (str1[0]) str2[j++] = str1[0];
// 隔位複製:str1[2], str1[4], ...
for (i = 2; str1[i]; i += 2)
str2[j++] = str1[i];
str2[j] = '\0';
}
int main(void) {
char str1[80] = "This Is a c Program";
char str2[80] = {0};
printf("原始字符串: %s\n", str1);
fun(str1, str2);
printf("結果字符串: %s\n", str2);
nono(str2);
return 0;
}
原始字符串: This Is a c Program 結果字符串: Ti a cPorm
索引對應:
T(0) h(1) i(2) s(3) (4) I(5) s(6) (7) a(8) (9) c(10) (11) P(12) r(13) o(14) g(15) r(16) a(17) m(18)
取偶數下標:0:T, 2:i, 4:空格, 6:s, 8:a, 10:c, 12:P, 14:o, 16:r, 18:m → "Ti s a cPorm" (注意索引 4 是空格,輸出中可見)。
str1[i] 等價於 str1[i] != '\0'。i += 2 實現隔位取字符。'\0' 結尾。fopen 返回值,用完 fclose。const char* 表達只讀語義,避免誤修改源串。此類「字符串篩選/轉換」是 C 語言指針操作基本功,變體包括:反轉、大小寫翻轉、去重、編碼轉換等,核心均為雙指針/雙索引遍歷 + 邊界檢查 + 結束符維護。