char SameGen(fp *p, char name[]) {
// ...
return p->lchild->person.name; // ❌ 返回 char* (字符串/數組)
// 或 return &p->lchild->person.name[0];
}
// 編譯錯誤:invalid conversion from 'char*' to 'char'
| 表達式 | 類型 | 含義 |
|---|---|---|
| `person.name` | `char[]` / `char*` | 字符數組/指向首字符的指針 |
| `person.name[0]` | `char` | 單個字符 |
| `&person.name[0]` | `char*` | 指向首字符的指針 |
// 修改返回類型
char *SameGen(fp *p, char name[]) {
// ...
return p->lchild->person.name; // 返回字符串首地址
}
// 調用處
char *result = SameGen(root, "Zhang");
printf("名字: %s\n", result);
char SameGen(fp *p, char name[]) {
// ...
return p->lchild->person.name[0]; // 返回首字符值
}
// 調用處
char firstChar = SameGen(root, "Zhang");
printf("首字符: %c\n", firstChar);
// 返回狀態碼,結果寫入調用者提供的緩衝區
int SameGen(fp *p, char name[], char *outBuf, size_t bufSize) {
if (!p || !p->lchild) return -1;
strncpy(outBuf, p->lchild->person.name, bufSize - 1);
outBuf[bufSize - 1] = '\0';
return 0;
}
// 調用處
char buf[32];
if (SameGen(root, "Zhang", buf, sizeof(buf)) == 0) {
printf("名字: %s\n", buf);
}
char *bad() {
char local[20] = "hello";
return local; // ❌ 返回棧上數組地址,函數返回後內存無效
}
char *good_static() {
static char buf[20] = "hello"; // 靜態存儲期,生命周期全程
return buf;
}
char *good_malloc() {
char *p = malloc(20);
strcpy(p, "hello");
return p; // 調用者負責 free
}
編譯器報錯 `char*` to `char` 直接指出類型不匹配。**返回字符串必須聲明 `char*`**,並確保返回的指針指向有效內存(靜態、堆、或調用者提供的緩衝區)。嚴禁返回局部數組指針。