문자열을 입력받아 길이를 출력하는 함수를 만들고, 함수 호출 이후에 해당 문자열을 다시 출력하려고 합니다.
코드:
fn main() {
let s = String::from("hello");
print_length(s);
println!("Original string: {}", s);
}
fn print_length(text: String) {
println!("Length: {}", text.len());
}
시도: 변수 `s`를 `let s = String::from("hello").clone();` 형태로 복제해 보았으나 구조적 해결책을 모르겠습니다.
질문: `print_length` 함수에서 소유권을 가져가지 않고 값만 참조하여 사용할 수 있게 하려면 함수 시그니처를 어떻게 변경해야 합니까?
댓글11
-
빗방울
2026.10.31 13:20
-
빗방울
2026.10.31 13:28
호출할 때 print_length(&s) 이렇게 앰퍼샌드 붙여서 넘겨주면 될걸요
처음엔 진짜 뇌정지 옴 ㅋㅋ
-
빗방울
2026.10.31 14:52
공식 문서 보면 slice 개념 설명되어 있는데 그거 한번 읽어보셈ㅋㅋ 적응되면 오히려 편함ㄷㄷ
-
빗방울
2026.10.31 14:54
ㄹㅇ 슬라이스 개념 잡는 게 진짜 중요함ㅋㅋ
그거 이해하고 나면 웬만한 에러는 다 잡히는듯ㄷㄷ
-
빗방울
2026.10.31 14:56
이거 완전 러스트 입문자 국룰 코스네요ㅋㅋ
소유권 개념 빡세긴 해도 나중에 런타임 에러 안 나서 개꿀인듯ㄷㄷ
화이팅하세요ㅋㅋ
-
빗방울
2026.10.31 19:18
ㄹㅇㅋㅋ 처음엔 빡쳐도 나중에 세그폴 안 뜨는 거 생각하면 진짜 신세계임ㅋㅋ 화이팅입니다ㄷㄷ
-
빗방울
2026.10.31 15:54
그냥 String 대신 &str 쓰면
호출할 때 더 유연하게 쓸 수 있어서 좋음ㅋㅋ
이거 뚫고 나면 다른 언어 못 쓸 것 같음ㄷㄷ
-
빗방울
2026.10.31 18:24
ㄹㅇㅋㅋ &str로 받으면 String이랑 문자열 리터럴 둘 다 받을 수 있어서 개편함ㄷㄷ
이게 ㄹㅇ 신세계임ㅋㅋ
-
빗방울
2026.10.31 16:31
클론 쓰면 메모리 낭비니까 그냥 참조자로 넘기는 게 답임ㅋㅋ
이거 익숙해지면 컴파일러가 친절하게 알려주는 느낌이라 오히려 좋음ㄷㄷ
-
빗방울
2026.10.31 19:42
나중에 더 복잡해지면 라이프타임 어노테이션 때문에 더 뇌정지 올 수도 있음ㅋㅋ
그때는 진짜 공식 문서 정독 각임ㄷㄷ
천천히 적응하시길ㅋㅋ
-
빗방울
2026.10.31 21:07
컴파일러가 빡세게 굴리는 게 처음엔 짜증나도
나중엔 이게 다 사랑인걸 알게 됨ㅋㅋ
일단 알려준 대로 고쳐보고 안 되면 다시 질문해보셈ㄷㄷ
모든 이야기1496
가벼운 안부부터 깊은 생각까지, 함께 나눠요.
함수 인자를 &str로 바꾸면 해결될듯요
러스트 처음 하면 보로우 체커 때문에
진짜 킹받음 ㅋㅋ