函式 char* read() { char temp[100]; ... return temp; } 返回區域陣列位址,函式結束時 **棧框銷毀**,記憶體被回收/覆蓋,呼叫端取得的是**懸空指標**,印出首字元後隨即出現亂碼。
void read(char* buf, int size) {
fgets(buf, size, stdin);
buf[strcspn(buf, "\n")] = 0;
}
int main() {
char str[100];
read(str, sizeof(str));
puts(str);
}
char* read() {
static char temp[100];
fgets(temp, sizeof(temp), stdin);
temp[strcspn(temp, "\n")] = 0;
return temp;
}
char* read() {
char* buf = malloc(100);
fgets(buf, 100, stdin);
buf[strcspn(buf, "\n")] = 0;
return buf;
}
int main() {
char* s = read();
puts(s);
free(s);
}
**永不返回區域變數位址**。若需返回字串,由呼叫端分配空間傳入、或動態配置並文件化釋放責任。