提供的文字解釋了使用角色指標(char *string
)和字元陣列(char string[]
)將字串儲存和修改字串之間的區別。
>範例1(分段故障):
<code class="language-c">#include <stdio.h> int main(void) { char *string = "Wello, world!"; // string is a pointer string[0] = 'H'; // Attempting to modify a read-only string puts(string); }</code>
指標string
。 該指標初始化為指向字串文字(“ wello,world!”),該指標通常儲存在唯讀的記憶體中。 試圖修改此僅讀取記憶體的內容會導致分割故障(記憶體存取違規)。
> 此程式碼成功列印了「 Hello,World!」。 在這裡,
被聲明為a<code class="language-c">#include <stdio.h> int main(void) { char string[] = "Wello, world!"; // string is an array string[0] = 'H'; // Modifying a writable copy of the string puts(string); }</code>
。編譯器在堆疊上分配空間以保存字串文字的副本。 此副本是可寫的,可以修改string
而不會引起錯誤。 string[0]
>基本差異在於字串的儲存方式。 在範例1中,字串文字位於僅讀取的記憶體中,指標只是指向它。在範例2中,建立並儲存在堆疊上的陣列中的字串文字的可寫複製。
結論:
以上是在 C 中分配字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!