diff options
| author | Steve Klabnik <steve@steveklabnik.com> | 2015-03-23 13:06:25 -0400 |
|---|---|---|
| committer | Steve Klabnik <steve@steveklabnik.com> | 2015-03-23 14:57:52 -0400 |
| commit | 1be8fcb4a955457b9ec6e16e34bdfbb7e4d849c7 (patch) | |
| tree | df14b54c989f8eb7287b67f320e455cba2c8fe57 | |
| parent | ecf8c64e1b1b60f228f0c472c0b0dab4a5b5aa61 (diff) | |
| download | rust-1be8fcb4a955457b9ec6e16e34bdfbb7e4d849c7.tar.gz rust-1be8fcb4a955457b9ec6e16e34bdfbb7e4d849c7.zip | |
Make note of str in 'more strings' chapter
Fixes #21035
| -rw-r--r-- | src/doc/trpl/more-strings.md | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/src/doc/trpl/more-strings.md b/src/doc/trpl/more-strings.md index 6567cd448f9..0f19b9249f5 100644 --- a/src/doc/trpl/more-strings.md +++ b/src/doc/trpl/more-strings.md @@ -12,7 +12,7 @@ Additionally, strings are not null-terminated and can contain null bytes. Rust has two main types of strings: `&str` and `String`. -# &str +# `&str` The first kind is a `&str`. This is pronounced a 'string slice'. String literals are of the type `&str`: @@ -36,7 +36,36 @@ Like vector slices, string slices are simply a pointer plus a length. This means that they're a 'view' into an already-allocated string, such as a string literal or a `String`. -# String +## `str` + +You may occasionally see references to a `str` type, without the `&`. While +this type does exist, it’s not something you want to use yourself. Sometimes, +people confuse `str` for `String`, and write this: + +```rust +struct S { + s: str, +} +``` + +This leads to ugly errors: + +```text +error: the trait `core::marker::Sized` is not implemented for the type `str` [E0277] +note: `str` does not have a constant size known at compile-time +``` + +Instead, this `struct` should be + +```rust +struct S { + s: String, +} +``` + +So let’s talk about `String`s. + +# `String` A `String` is a heap-allocated string. This string is growable, and is also guaranteed to be UTF-8. `String`s are commonly created by |
