char str[100];
int n;
scanf("%s", str); // 讀字串
scanf("%d", n); // 錯誤:缺 & 取址符
printf("%s", str + n); // 從第 n 個字元輸出 (0-based)
scanf("%d", &n); // 必須加 & 取地址
// 或更安全:
if (scanf("%d", &n) != 1) { /* 錯誤處理 */ }
#include
#include
int main() {
char str[100];
int n;
printf("輸入字串: ");
if (scanf("%99s", str) != 1) return 1; // 限制長度防溢出
printf("輸入起始位置 n (0-based): ");
if (scanf("%d", &n) != 1) return 1;
// 邊界檢查
int len = strlen(str);
if (n < 0) n = 0;
if (n >= len) {
printf("n 超出字串長度 (長度=%d)\n", len);
return 0;
}
// 指針運算:str + n 指向第 n 個字元 (0-based)
printf("結果: %s\n", str + n);
return 0;
}
| 概念 | 說明 |
|---|---|
| `str` | 字串首地址 (指向 `str[0]`) |
| `str + n` | 指針加法:地址增加 `n * sizeof(char)`,指向 `str[n]` |
| `%s` 輸出 | 從給定地址連續輸出字元直到 `\0` |
| 0-based 索引 | C 語言陣列/字串索引從 0 開始,`n=0` 輸出整串,`n=1` 輸出第 2 個字元起 |
printf("輸入起始位置 (1 為第一個字元): ");
scanf("%d", &n);
if (n >= 1 && n <= len) {
printf("結果: %s\n", str + n - 1); // 轉為 0-based
}
char line[200];
fgets(line, sizeof(line), stdin); // 讀整行含空格
sscanf(line, "%99s %d", str, &n); // 解析
避免 `scanf` 留下換行符導致後續輸入異常。