외부에서 입력받은 문자열의 일부를 슬라이스로 잘라 구조체 필드에 할당하여 사용하려고 합니다.
코드:
struct User<'a> {
name: &'a str,
}
fn create_user(input: String) -> User {
let name_slice = &input[0..4];
User { name: name_slice }
}
fn main() {
let user = create_user(String::from("Rustacean"));
println!("{}", user.name);
}
오류: error[E0515]: cannot return value referencing local variable `input`
--> src/main.rs:7:16
|
7 | User { name: name_slice }
| ^^^^^^^^^^^^ returns a value referencing data owned by the current function
시도: 구조체 정의에 `'a` 라이프타임 파라미터를 추가하였으나 동일한 에러가 발생합니다.
질문: `create_user` 함수 내부에서 생성된 `String`의 일부를 `User` 구조체에 담아 반환하려면 어떻게 수정해야 합니까?
댓글6
-
빗방울
2026.10.30 15:12
-
빗방울
2026.10.30 15:20
ㄹㅇ 처음 배울 때 라이프타임에서 다들 멘탈 터짐ㅋㅋ
그냥 String 쓰는 게 제일 속 편하긴 함.
아니면 Cow 써보는 것도 방법일 듯요.
-
빗방울
2026.10.30 15:22
ㄹㅇㅋㅋ 저도 처음에
소유권 개념 꼬여서 한참 헤맸네요
그냥 String으로 밀어버리는 게
제일 깔끔하긴 함ㅋㅋ
-
빗방울
2026.10.30 17:04
ㄹㅇ 킹받는 포인트죠ㅋㅋ
근데 input을 밖에서 받으려면 호출하는 쪽에서도 라이프타임 관리해야 해서 결국 머리 아파질듯함ㅋㅋ
-
빗방울
2026.10.30 18:10
이거 input을 String이 아니라 &str로 받으면 해결될 것 같은데
한번 해보셈ㅋㅋ ㄷㄷ
-
빗방울
2026.10.30 18:22
내 생각엔 input을 &str로 받는 게 제일 정석인 듯함ㅋㅋ
그렇게 하면 input의 수명이 함수 밖이랑 연결돼서 에러 안 날 거예요ㄷㄷ
모든 이야기1488
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
러스트 라이프타임 진짜 킹받네요ㅋㅋ
그냥 구조체 필드를 String으로 바꾸고 to_string() 해서 넣는 게 정신건강에 이로울듯함.
아니면 input을 함수 밖에서 받아서 넘겨보세요.