러스트의 스트링과 스트링의 차이점은 무엇일까.
에는 왜 'Rust'가 있는 죠?String
★★★★★★★★★★★★★★★★★」str
의 차이는 무엇입니까?String
★★★★★★★★★★★★★★★★★」str
String
str
리고고 그???그 중 한 명이 더 이상 사용되지 않는 건가요?
String
스트링 입니다.예를 들면, 「입니다.Vec
: 또는 할 때 문자열 데이터를 소유하거나 변경해야 할 때 사용합니다.
str
는, 메모리내의 다이나믹 길이의 UTF-8 바이트의 불변의1 시퀀스입니다.크기를 알 수 없기 때문에 포인터 뒤에서만 처리할 수 있습니다.즉,str
가장 일반적으로2 나타나다&str
: UTF-8 데이터에 대한 참조.일반적으로 '스트링 슬라이스' 또는 '슬라이스'라고 불립니다.슬라이스는 일부 데이터에 대한 보기일 뿐이며, 데이터는 예를 들어 어디에나 있을 수 있습니다.
정적 스토리지: 문자열 리터럴
"foo"
는 입니다.&'static str
데이터는 실행 파일에 하드 코드되어 프로그램 실행 시 메모리에 로드됩니다.할당된 힙 내부: 뷰에 대한 참조
String
을 사용하다스택: 예를 들어 다음과 같이 스택에 할당된 바이트 배열을 만들고 해당 데이터를 로 표시합니다.
use std::str; let x: &[u8] = &[b'a', b'b', b'c']; let stack_str: &str = str::from_utf8(x).unwrap();
「」를 합니다.String
하고 있는 데이터스레드에 등가, "String data"를 사용합니다.&str
문자열 보기만 필요한 경우.
은 벡터의 .Vec<T>
슬라이스 " " " " "&[T]
값별 관계와 유사합니다.T
참조용 ★★★★★&T
츠미야
1 A.str
고정 길이종료를 초과하여 바이트를 쓰거나 말미에 비활성 바이트를 남길 수 없습니다.이므로 사실상 UTF-8이 됩니다.str
많은 경우 불변합니다. 많은 더 적은 를 쓸 가 있습니다, 된 바이트).a
바이트 (1 바이트) )ä
는 (2+바이트)에 을 더 해야 합니다.str
)를할 수 있는 &mut str
(대부분 ASCII 문자만을 처리하는 것 등)이 준비되어 있습니다.
다이내믹 사이즈의 타입에 의해, 2다음과 같은 것이 가능하게 됩니다.Rc<str>
Lust 1.2 이후 UTF-8 바이트 카운트된 일련의 참조에 대해 설명합니다.녹 1.21을 사용하면 이러한 유형을 쉽게 만들 수 있습니다.
는 C을 가지고 , C++의 경우, C++의 경우, C++의 경우라고 .String
★★★★★★★★★★★★★★★★★」&str
C++:
- Rust »
String
a a 같다std::string
; 메모리를 소유하고 메모리 관리라는 더러운 일을 합니다. - Rust »
&str
a a 같다char*
( 조금 더 : (어느 쪽인가 하면) : (어느 쪽인가 하면) : ( 쪽인가 하면)의에 대한 포인터를 수 있는 , 이것은, 다음의 내용에 대한 포인터를 얻을 수 있는 것과 같은 방법으로,std::string
.
둘 중 하나가 사라지는 건가요?난 그렇게 생각하지 않아.두 가지 목적이 있습니다.
String
이치노 &str
는 가볍기 때문에 스트링을 "찾아보기" 위해 사용해야 합니다.새 메모리를 할당할 필요 없이 청크를 검색, 분할, 구문 분석 및 교체할 수 있습니다.
&str
을 수 String
문자열 리터럴을 가리킬 수 있습니다. .String
「이것들」은 다음과 같습니다.
let a: String = "hello rust".into();
다음 코드를 사용하면 복사 없이 리터럴 자체를 사용할 수 있습니다(단, 읽기 전용).
let a: &str = "hello rust";
렇렇 it it it it 。str
String
한 조각이 아니라
안str
로, 으로는 사전문자열 텍스트입니다.
"Hello World"
이 텍스트는 어딘가에 저장되어야 하므로 프로그램의 기계 코드와 함께 실행 파일의 데이터 섹션에 바이트 순서([u8])로 저장됩니다.텍스트는 임의의 길이로 사용할 수 있으므로 크기가 동적으로 조정됩니다.
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ H │ e │ l │ l │ o │ │ W │ o │ r │ l │ d │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┐
│ 72 │ 101 │ 108 │ 108 │ 111 │ 32 │ 87 │ 111 │ 114 │ 108 │ 100 │
└─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┴─────┘
저장된 텍스트에 액세스할 수 있는 방법이 필요합니다. 여기서 슬라이스가 삽입됩니다.
한 조각,[T]
는 메모리 블록의 뷰입니다.변동 가능 여부에 관계없이 슬라이스는 항상 빌리기 때문에 항상 포인터 뒤에 있습니다.&
.
동적 크기의 의미에 대해 설명하겠습니다. 일부 언어에서는됩니다(C는 0바이트입니다).\0
스트링의 마지막에, 개시 주소의 레코드를 보관합니다.문자열의 길이를 결정하려면 프로그램은 시작 위치에서 이 0바이트를 찾을 때까지 원시 바이트를 통과해야 합니다.따라서 텍스트의 길이는 임의의 크기로 지정할 수 있으므로 동적으로 크기가 지정됩니다.
녹슬다슬라이스를 사용합니다.는 라이스 a a a a a a a a a a a a a a a의 주소를 합니다.str
을 사용하다계산은 컴파일 중에 미리 이루어지므로 0바이트를 추가하는 것보다 낫다.텍스트는 임의의 크기를 가질 수 있기 때문에 유형 시스템의 관점에서 볼 때 여전히 동적으로 크기가 조정됩니다.
따라서 "Hello World" 식에서는 실제 데이터의 주소와 길이가 모두 포함된 팻 포인터가 반환됩니다.이 포인터는 실제 데이터에 대한 우리의 핸들이 될 것이며 우리의 프로그램에도 저장될 것입니다.이제 데이터는 포인터 뒤에 있으며 컴파일러는 컴파일 시 그 크기를 알 수 있습니다.
코드에 중인 타임 중인 프로그램의 라이프 타임 전체에 유효합니다.static
라이프 타임
따라서 "Hello Word" 식의 반환값은 다음 두 가지 특성을 반영해야 합니다.
let s: &'static str = "Hello World";
이가 '보다'로 수 .str
그런 것은 [u8]
이는 데이터가 항상 유효한 UTF-8 시퀀스임을 보증하기 때문입니다.UTF-8은 UTF-8을 사용합니다.4번으로 하다【u8】
개의 Rust가 됩니다.str
는 데이터 섹션에 서로 인접하여 저장되며, 한쪽은 어디서 시작하고 다른 한쪽은 종료되는지 알 수 없습니다.
컴파일러는 더 나아가고 있습니다.프로그램의 여러 위치에서 동일한 정적 텍스트가 사용되는 경우, Rust 컴파일러는 프로그램을 최적화하고 실행 파일의 데이터 섹션과 코드 내의 각 슬라이스가 이 이진 블록을 가리킵니다.
를 들어 "World"라는내용을 단일 은 "Hello World"라는 도 마찬가지입니다.【3 】"Hello World"
:
let x: &'static str = "Hello World";
let y: &'static str = "Hello World";
let z: &'static str = "Hello World";
String
한편, u8의 벡터로서 값을 저장하는 특수한 타입입니다.,.String
코드에 되어 있습니다.type 소소 、 type 、 type type type type type 。
pub struct String {
vec: Vec<u8>,
}
벡터가 된다는 것은 다른 벡터 값과 마찬가지로 힙 할당 및 크기 조정이 가능하다는 것을 의미합니다.
전문화란 임의의 액세스를 허용하지 않고 데이터가 항상 유효한 UTF-8임을 확인하는 것을 의미합니다.그 외에는 벡터일 뿐입니다.
a 비기상 so so so String
는 UTF-8 텍스트를 유지하는 크기 조정 가능한 버퍼입니다.이 버퍼는 힙에 할당되므로 필요에 따라 또는 요청에 따라 확장할 수 있습니다.이 버퍼는 어떻게든 채울 수 있어요.을 사용하다
★★★★★★★★★★★★★★★★★.vec
필드는 유효성을 적용하기 위해 비공개로 유지됩니다.이것은 비공개이므로 String 인스턴스를 직접 생성할 수 없습니다.모든 바이트 스트림이 유효한 utf-8 문자를 생성하는 것은 아니며 기본 바이트와의 직접 대화에 의해 문자열이 파손될 수 있기 때문에 이 스트링이 비공개로 유지됩니다.을 .u8
메서드 및 메서드를 통한 바이트는 특정 체크를 수행합니다.우리는 사적인 것과 방법을 통한 통제된 상호작용이 확실한 보증을 제공한다고 말할 수 있다.
String 인스턴스 작성에는 String type에 정의된 몇 가지 방법이 있습니다.new는 그 중 하나입니다.
pub const fn new() -> String {
String { vec: Vec::new() }
}
유효한 String을 작성하기 위해 사용할 수 있습니다.
let s = String::new();
println("{}", s);
아쉽게도 입력 파라미터는 사용할 수 없습니다.따라서 결과는 유효하지만 빈 문자열이지만 할당된 값을 유지하기에 용량이 충분하지 않은 경우 다른 벡터처럼 증가합니다.그러나 성장하려면 재할당이 필요하기 때문에 애플리케이션 성능이 저하될 수 있습니다.
다른 소스로부터의 초기값으로 기본 벡터를 채울 수 있습니다.
문자열 리터럴에서
let a = "Hello World";
let s = String::from(a);
str
, 그 은 ""를 통해 에 할당된 벡터에 됩니다.String.from
실행 가능한 바이너리를 체크하면 "Hello World"라는 내용의 원시 바이트가 데이터 섹션에 표시됩니다.이것은 일부 사람들이 놓치는 매우 중요한 세부 사항입니다.
가공되지 않은 부품부터
let ptr = s.as_mut_ptr();
let len = s.len();
let capacity = s.capacity();
let s = String::from_raw_parts(ptr, len, capacity);
캐릭터에서
let ch = 'c';
let s = ch.to_string();
바이트의 벡터로부터
let hello_world = vec![72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100];
// We know it is valid sequence, so we can use unwrap
let hello_world = String::from_utf8(hello_world).unwrap();
println!("{}", hello_world); // Hello World
여기 또 다른 중요한 세부사항이 있습니다.는 임의의 수 , 그할 수 는 UTF-8을으로써 이를 고려해야 .따라서 Rust는 다음 값을 반환함으로써 이 점을 고려해야 합니다.Result<String, FromUtf8Error>
가 a a String
.
입력 버퍼에서
use std::io::{self, Read};
fn main() -> io::Result<()> {
let mut buffer = String::new();
let stdin = io::stdin();
let mut handle = stdin.lock();
handle.read_to_string(&mut buffer)?;
Ok(())
}
또는 다른 유형의 구현에서ToString
분석
★★String
후드 아래의 벡터이며 다음과 같은 벡터 특성을 나타냅니다.
- 포인터:포인터는 데이터를 저장하는 내부 버퍼를 가리킵니다.
- length : 길이는 버퍼에 현재 저장되어 있는 바이트 수입니다.
- 용량:capacity는 버퍼 크기(바이트)입니다.따라서 길이는 항상 용량보다 작거나 같아야 합니다.
또한 몇 가지 특성과 방법을 벡터에 위임합니다.
pub fn capacity(&self) -> usize {
self.vec.capacity()
}
에서는 「」를 사용하고 있습니다.String::from
그래서 사람들은 왜 다른 문자열에서 String을 만드는지 헷갈린다.
오래 읽었으니까 도움이 됐으면 좋겠네요.
들르아, 아.str
는 타입 레벨에 지나지 않습니다.이것은 이른바 Dynamic-Size Type(DST; 다이내믹사이즈 타입)이기 때문에 타입 레벨에서만 추론할 수 있습니다.「」의 str
컴파일 시에는 알 수 없고 런타임 정보에 의존합니다.컴파일러가 각 변수의 크기를 알아야 하기 때문에 변수에 저장할 수 없습니다. a.str
는 개념적으로 ''의 에 불과합니다.u8
유효한 UTF-8을 형성하는 것을 보증하는 바이트입니다.의의크 기마 ?? ????런타임까지 아무도 모르기 때문에 변수에 저장할 수 없습니다.
은...&str
로서 또른른 에 대한 str
Box<str>
가 런타임에 존재합니다.이것은 이른바 "팻 포인터"로, 추가 정보(이 경우 가리키는 물건의 크기)가 있는 포인터이므로 크기가 두 배입니다.사실...&str
꽤 String
, (그냥)에게는.&String
A ) 。&str
단어로, 2개의 의 첫 입니다.str
로, 른른, 치 and, 치 and, - and, -메, -메, -메, -메, - and, - and, - and, - and, - and, - and, - and and, -, -, and, and and, and, and, and, and, and, long, long, str
empty.month.mpti.
말과는 달리str
불변할 필요는 없습니다.만약 구할 수 있다면&mut str
에 대한 str
을 사용하다변환되는 모든 안전한 함수는 UTF-8 제약이 유지됨을 보증합니다.이는 UTF-8 제약이 위반될 경우 라이브러리가 이 제약이 참이라고 가정하고 이를 확인하지 않기 때문입니다.
'A'가 죠?String
3단어, 2단어, 2단어랑 똑같아요.&str
세 번째 단어를 추가하는데, 그것은 그 능력이다.str
(「」, 「」, 「」(a)str
반드시 힙에 있는 것은 아님)이 가득 차기 전에 관리하며 다시 작성해야 합니다.그String
기본적으로 소유하다str
제어하고 크기를 조정하여 적합하다고 판단될 때 재할당할 수 있습니다. ★★★★★★★★★★★★★★★★★★.String
라고 하는 것은, 「」에 입니다.&str
훨씬str
.
는 ★★★★★★★★★★★★★★★★★★★.Box<str>
이합니다. ; 것도소소소소 ; 。str
시 은 실행 시 표현과 .&str
, 「CHANGE」도 소유하고 있습니다.str
는 the와는 &str
할 수 으로는 크기를 조정할 수 없습니다.Box<str>
한 길이로 볼 수String
할 수 합니다).String
크기를 변경할 경우).
사이에는 매우 유사한 관계가 존재한다.[T]
★★★★★★★★★★★★★★★★★」Vec<T>
, 이지 않은 할 수 있습니다.
「 」의 str
, 즉 일반 추상화를 것입니다.&str
; 쉽게 특성을 쓸 수 있도록 타입 레벨에 존재합니다.str
, 존재하기만 하면 되는 &str
하지만 이제는 범용적인 코드를 많이 작성해야 합니다.
&str
는, 복수의 할 수 합니다.String
, 바와 , A.String
소유주str
힙 에서 ""의 할 수 String
String
Rust에 있는 모든 것은 메모리 안전을 다룰 단 한 명의 소유자를 가질 수 있기 때문에 복사해야 합니다.예를 들어 문자열을 슬라이스할 수 있습니다.
let string: String = "a string".to_string();
let substring1: &str = &string[1..3];
let substring2: &str = &string[2..4];
서브스트링이 .str
은은문문 문다다다다다 string
는, 의 풀 「풀」(full)을 소유하는 입니다.str
와 """의 버퍼""&str
서브스트링은 힙상의 버퍼에 대한 fat 포인터일 뿐입니다.
str
, 로만 사용됩니다.&str
는 UTF-8 바이트어레이를 참조하는 문자열 슬라이스입니다.
String
옛날에는 그랬다~str
UTF-8의 UTF-8입니다.
»&str
★★★★★★★★★★★★★★★★★」String
String
:
- Rust가 소유한 String 타입은 문자열 자체가 힙에 존재하기 때문에 변경 가능하며 크기와 내용을 변경할 수 있습니다.
- 문자열을 소유한 변수가 범위를 벗어나면 문자열이 소유되므로 힙의 메모리가 해방됩니다.
- 변수 " " "
String
pointers + 관련 메타데이터)는 fat pointers(fat pointers + fat pointers)입니다. - 지방 3 × 8 、 、 음 3 、 음 3 、 음 3 、 음 3 、 음 3 개 、 fat 3 개 、 fat fat 、
- 힙의 실제 데이터에 대한 포인터로 첫 번째 문자를 가리킵니다.
- 문자열 길이(문자 수)
- 힙의 문자열 용량
&str
:
- Rust의 비소유 String 유형으로 기본적으로 불변입니다.스트링 자체는 보통 힙 위 또는 메모리 내의 다른 장소에 존재합니다.
'static
★★★★★★ 。 - String이 경우 은 비소유이기 입니다.
&str
변수가 범위를 벗어나면 문자열의 메모리가 해방되지 않습니다. - 변수 " " "
&str
pointers + 관련 메타데이터)는 fat pointers(fat pointers + fat pointers)입니다. - 지방 2 × 8 ( wordsize ), 2 ( wordsize ), 2 ( wordsize ), 2 ( wordsize )
- 힙의 실제 데이터에 대한 포인터로 첫 번째 문자를 가리킵니다.
- 문자열 길이(문자 수)
예:
use std::mem;
fn main() {
// on 64 bit architecture:
println!("{}", mem::size_of::<&str>()); // 16
println!("{}", mem::size_of::<String>()); // 24
let string1: &'static str = "abc";
// string will point to 'static memory which lives throughout the whole program
let ptr = string1.as_ptr();
let len = string1.len();
println!("{}, {}", unsafe { *ptr as char }, len); // a, 3
// len is 3 characters long so 3
// pointer to the first character points to letter a
{
let mut string2: String = "def".to_string();
let ptr = string2.as_ptr();
let len = string2.len();
let capacity = string2.capacity();
println!("{}, {}, {}", unsafe { *ptr as char }, len, capacity); // d, 3, 3
// pointer to the first character points to letter d
// len is 3 characters long so 3
// string has now 3 bytes of space on the heap
string2.push_str("ghijk"); // we can mutate String type, capacity and length will also change
println!("{}, {}", string2, string2.capacity()); // defghijk, 8
} // memory of string2 on the heap will be freed here because owner goes out of scope
}
std::String
a순한 of of of of of of of of of of의 이다.u8
. 그 정의는 소스 코드에서 찾을 수 있습니다.힙 할당으로 확장 가능합니다.
#[derive(PartialOrd, Eq, Ord)]
#[stable(feature = "rust1", since = "1.0.0")]
pub struct String {
vec: Vec<u8>,
}
str
는 문자열 슬라이스라고도 불리는 원시 유형입니다.문자열 슬라이스는 크기가 고정되어 있습니다.문자 그대로의 문자열과 같은let test = "hello world"
있다&'static str
유형.test
는 이 스태틱하게 할당된 문자열을 참조합니다. &str
할 수 . 수정은 할 수 없습니다.
let mut word = "hello world";
word[0] = 's';
word.push('\n');
str
가 있습니다.&mut str
를 들면, '아까다'와 같이요pub fn split_at_mut(&mut self, mid: usize) -> (&mut str, &mut str)
let mut s = "Per Martin-Löf".to_string();
{
let (first, last) = s.split_at_mut(3);
first.make_ascii_uppercase();
assert_eq!("PER", first);
assert_eq!(" Martin-Löf", last);
}
assert_eq!("PER Martin-Löf", s);
그러나 UTF-8에 대한 작은 변경으로 바이트 길이가 변경될 수 있으며 슬라이스는 참조를 재할당할 수 없습니다.
쉽게 말하면String
히프에 되어 있습니다(「」와 ).Vec
그 할 수 에 액세스 할 수 있습니다.
&str
슬라이스 타입입니다., 이미 하고 있는 ,, 미, 미, 미, 미, 미, that, that, that, that, that, that, that, that, that, that, that, that, that, that, that, that, that, that,String
산더미 속 어딘가에.
&str
는 런타임에 할당을 하지 않습니다.메모리상의 로 '기억의 이유'를 할 수 있습니다.&str
에 걸쳐서String
단, 사용할 때는 주의해 주십시오.&str
노골적인 수명을 감당해야 할 수도 있어요
C# 및 Java 사용자:
String
===StringBuilder
- 슬다
&str
의) 문자열불변의) 문자열
는 ★★★★★★를 생각하고 .&str
변경할 수 없는 Java/C#의 내부 문자열과 같이 문자열에 대한 보기로서 새 문자열만 만듭니다.
일부 사용법
예_1.rs
fn main(){
let hello = String::("hello");
let any_char = hello[0];//error
}
예_2.rs
fn main(){
let hello = String::("hello");
for c in hello.chars() {
println!("{}",c);
}
}
예_3.rs
fn main(){
let hello = String::("String are cool");
let any_char = &hello[5..6]; // = let any_char: &str = &hello[5..6];
println!("{:?}",any_char);
}
Shadowing
fn main() {
let s: &str = "hello"; // &str
let s: String = s.to_uppercase(); // String
println!("{}", s) // HELLO
}
function
fn say_hello(to_whom: &str) { //type coercion
println!("Hey {}!", to_whom)
}
fn main(){
let string_slice: &'static str = "you";
let string: String = string_slice.into(); // &str => String
say_hello(string_slice);
say_hello(&string);// &String
}
Concat
// String is at heap, and can be increase or decrease in its size
// The size of &str is fixed.
fn main(){
let a = "Foo";
let b = "Bar";
let c = a + b; //error
// let c = a.to_string + b;
}
:String
★★★★★★★★★★★★★★★★★」&str
동안 99%만 써야 .&str
.
Rust에서 str은 Unicode 스칼라 값의 시퀀스를 나타내는 원시 유형으로 문자열 슬라이스라고도 합니다.즉, 문자열에 대한 읽기 전용 뷰이며 가리키는 메모리를 소유하지 않습니다.한편, String은 확장 가능한, 가변 가능한 소유 문자열 유형입니다.즉, String을 작성할 때 힙에 메모리를 할당하여 문자열의 내용을 저장하고 String이 범위를 벗어나면 이 메모리의 할당을 해제합니다.String은 확장 및 변경이 가능하므로 String 작성 후 내용을 변경할 수 있습니다.
일반적으로 str은 String과 같은 다른 데이터 구조에 저장된 문자열 슬라이스를 참조할 때 사용됩니다.문자열 값은 문자열 값을 만들고 소유할 때 사용합니다.
String
을 사용하다
&str
는 객체의 일부에 있는 포인터입니다.
이 3가지 타입에서는
let noodles = "noodles".to_string(); let oodles = &noodles[1..]; let poodles = "ಠ_ಠ"; // this is string literal
String에는 UTF-8 텍스트를 유지하는 크기 조정 가능한 버퍼가 있습니다.버퍼는 힙에 할당되므로 필요에 따라 또는 요청에 따라 버퍼 크기를 조정할 수 있습니다.이 예에서 "noodles"는 8바이트 버퍼를 소유하는 문자열이며, 이 중 7바이트가 사용되고 있습니다.확실히 할 수 할 수 String은 해서 UTF-8을 유지할 수 .을 사용하다
String
구현되어 있습니다.A
&str
는 다른 사용자가 소유한 UTF-8 텍스트의 실행을 참조하는 것입니다.이 텍스트는 '차용'됩니다.이 예에서 odles는 "noodles"에 속하는 텍스트의 마지막 6바이트를 가리키는 &str이므로 "woodles"라는 텍스트를 나타냅니다. 로 a는,&str
는 입니다.fat pointer
는 실제 데이터의 주소와 그 길이를 모두 포함합니다.를 들면 '아예'라고 .&str
UTF-8은 UTF-8과 [u8]의 조합입니다.A
string literal
는 입니다.&str
이는 미리 할당된 텍스트를 나타내며, 일반적으로 프로그램의 기계 코드와 함께 읽기 전용 메모리에 저장됩니다.위의 예에서 poodle은 문자열 리터럴로 프로그램 실행 시작 시 작성되어 종료될 때까지 지속되는7 바이트를 가리킵니다.이렇게 메모리에 저장됩니다.
레퍼런스:프로그래밍 러스트 by Jim Blandy, Jason Orendorff, Leonora F. S. Tindall
여기 빠르고 쉬운 설명이 있습니다.
String
가능하고 가능한 힙 구조 - 확장 가능한 힙 할당 데이터 구조.으로 할 .&str
.
str
는 (가 진화함에 힙 바이너리에 하는 가변 입니다.-( Rust ) 。할 수 것은 「」입니다.str
뷰를 할 수 (예: 스트링 슬라이스 뷰&str
.
사용상의 고려사항:
String
문자열을 소유하거나 변환하려는 경우(예: 문자열을 다른 스레드에 전달하는 경우)
&str
문자열 읽기 전용 보기를 원하는 경우.
언급URL : https://stackoverflow.com/questions/24158114/what-are-the-differences-between-rusts-string-and-str
'programing' 카테고리의 다른 글
.NET / C# - char[]를 문자열로 변환 (0) | 2023.04.26 |
---|---|
셀에서 쉼표를 줄 바꿈으로 바꿉니다. (0) | 2023.04.21 |
경고: push.default가 설정되지 않았습니다.Git 2.0에서 암묵적인 값이 변화하고 있습니다. (0) | 2023.04.21 |
PowerShell을 사용하여 서브스트링 추출 (0) | 2023.04.21 |
SQL NVARCHAR 및 VARCHAR 제한 (0) | 2023.04.21 |