C中char 和char []的區(qū)別

char *p 和char[] 的區(qū)別限寞,在函數(shù)傳參和 返回值時(shí)候的區(qū)別忍啸,以及在strcpy 時(shí)候的用法和區(qū)別

??char *pchar[] 在 C 語(yǔ)言中代表了兩種不同類(lèi)型的字符數(shù)組或字符串的引用方式,它們?cè)诤瘮?shù)傳參履植、返回值和 strcpy 的用法上存在一些區(qū)別计雌。

1. 聲明和初始化

  • char *p;:聲明了一個(gè)字符指針 p,它本身不存儲(chǔ)字符玫霎,而是指向某個(gè)字符的存儲(chǔ)位置凿滤。在初始化時(shí),你需要為它分配內(nèi)存或使其指向一個(gè)已存在的字符數(shù)組庶近。
  • char arr[N];:聲明了一個(gè)大小為 N 的字符數(shù)組 arr翁脆,數(shù)組本身在棧上分配了內(nèi)存,可以直接存儲(chǔ)字符鼻种。

2. 函數(shù)傳參

  • 使用 char *p 作為參數(shù)時(shí)反番,你傳遞的是指針的值,即指向字符數(shù)組的起始地址。在函數(shù)內(nèi)部罢缸,你可以通過(guò)這個(gè)指針訪問(wèn)和修改該地址處的數(shù)據(jù)篙贸。
  • 使用 char arr[] 作為參數(shù)時(shí),實(shí)際上在函數(shù)內(nèi)部會(huì)被當(dāng)作 char * 來(lái)處理(在大多數(shù)情況下枫疆,除了數(shù)組作為函數(shù)參數(shù)時(shí)的大小檢查)爵川。因此,在函數(shù)內(nèi)部息楔,你同樣可以通過(guò)指針訪問(wèn)和修改數(shù)據(jù)寝贡。但需要注意,如果函數(shù)外部傳遞的是數(shù)組名(即數(shù)組的首地址)值依,則函數(shù)內(nèi)部無(wú)法知道數(shù)組的實(shí)際大小兔甘。

3. 返回值

  • 使用 char * 作為返回值時(shí),你可以返回一個(gè)指向某個(gè)字符數(shù)組的指針鳞滨。這通常用于動(dòng)態(tài)分配的內(nèi)存(如使用 malloccalloc),但你需要確保在適當(dāng)?shù)臅r(shí)候釋放內(nèi)存以避免內(nèi)存泄漏蟆淀。
  • 直接使用 char[] 作為返回值是不合法的拯啦,因?yàn)楹瘮?shù)返回的是棧上的局部數(shù)組的地址,而這個(gè)地址在函數(shù)返回后可能已經(jīng)不再有效(因?yàn)闂熔任?臻g可能被其他函數(shù)調(diào)用覆蓋)褒链。但你可以通過(guò)返回指向靜態(tài)或全局字符數(shù)組的指針,或者返回一個(gè)動(dòng)態(tài)分配的字符數(shù)組來(lái)實(shí)現(xiàn)類(lèi)似的功能疑苔。

4. strcpy 的用法和區(qū)別

  • 對(duì)于 char *p甫匹,你需要先確保 p 指向了一個(gè)已分配足夠內(nèi)存的空間(比如使用 malloc),然后才能使用 strcpy 將字符串復(fù)制到該空間惦费。
char *p = malloc(strlen(src) + 1); // 分配足夠的內(nèi)存
if (p != NULL) {
    strcpy(p, src); // 將 src 復(fù)制到 p 指向的內(nèi)存
}
  • 對(duì)于 char arr[N]兵迅,由于數(shù)組本身在棧上分配了內(nèi)存,因此你可以直接使用 strcpy 將字符串復(fù)制到數(shù)組中薪贫。但你需要確保源字符串的長(zhǎng)度不會(huì)超過(guò)數(shù)組的大小(包括終止符 '\0')。
char arr[100];
strcpy(arr, src); // 假設(shè) src 的長(zhǎng)度不超過(guò) 99

總結(jié)

  • char *pchar[] 在本質(zhì)上都是對(duì)字符數(shù)組的引用腰根,但它們?cè)趦?nèi)存分配累澡、生命周期和用法上有所不同。
  • 在函數(shù)傳參時(shí)鞍匾,兩者都可以作為字符串的引用傳遞交洗,但在返回值時(shí)需要特別注意內(nèi)存管理和生命周期的問(wèn)題。
  • 在使用 strcpy 時(shí)橡淑,需要確保目標(biāo)空間有足夠的內(nèi)存來(lái)存儲(chǔ)源字符串构拳,并避免緩沖區(qū)溢出等安全問(wèn)題。

char *p 和char[] 的初始化和賦值

??下面是一個(gè)簡(jiǎn)單的 C 語(yǔ)言程序,演示了 char *p(字符指針)和 char[](字符數(shù)組)的初始化和賦值:

#include <stdio.h>
#include <string.h>

int main() {
    // char *p 的初始化和賦值
    // 1. 直接指向字符串字面量(常量區(qū))
    char *p1 = "Hello, World!";
    printf("p1 points to: %s\n", p1);

    // 注意:不能通過(guò) p1 修改指向的字符串內(nèi)容隐圾,因?yàn)樗侵蛔x的
    // p1[0] = 'h'; // 這會(huì)導(dǎo)致運(yùn)行時(shí)錯(cuò)誤

    // 2. 動(dòng)態(tài)分配內(nèi)存并賦值
    char *p2 = malloc(strlen("Hello, Dynamic!") + 1); // +1 是為了 '\0'
    if (p2 != NULL) {
        strcpy(p2, "Hello, Dynamic!");
        printf("p2 points to: %s\n", p2);
        free(p2); // 使用完畢后釋放內(nèi)存
    }

    // char[] 的初始化和賦值
    // 1. 初始化時(shí)賦值
    char arr1[] = "Hello, Array!";
    printf("arr1 contains: %s\n", arr1);

    // 2. 運(yùn)行時(shí)賦值
    char arr2[20]; // 分配足夠的空間來(lái)存儲(chǔ)字符串和終止符 '\0'
    strcpy(arr2, "Hello, Runtime!");
    printf("arr2 contains: %s\n", arr2);

    // 可以通過(guò)索引修改數(shù)組內(nèi)容
    arr2[0] = 'h';
    printf("After modification, arr2 contains: %s\n", arr2);

    return 0;
}

注意:

  1. 使用 malloc 需要包含頭文件 <stdlib.h>伍掀,但為了簡(jiǎn)潔,我在上面的示例中沒(méi)有包含它暇藏。
  2. 使用 malloc 分配的內(nèi)存需要使用 free 釋放蜜笤,以防止內(nèi)存泄漏。
  3. 嘗試修改指向字符串字面量的指針(如 p1[0] = 'h';)是未定義的行為盐碱,因?yàn)樽址置媪客ǔ4鎯?chǔ)在只讀的內(nèi)存區(qū)域把兔。
  4. 在為 char[] 分配空間時(shí),請(qǐng)確保有足夠的空間來(lái)存儲(chǔ)字符串和終止符 '\0'瓮顽。

如何動(dòng)態(tài)分配字符串并保存到字符串變量中

??在C語(yǔ)言中县好,字符串通常是以字符數(shù)組或字符指針(指向字符數(shù)組的首地址)的形式存在的。當(dāng)你想要?jiǎng)討B(tài)分配一個(gè)字符串時(shí)暖混,你通常會(huì)使用malloc缕贡、callocrealloc等函數(shù)來(lái)在堆上分配內(nèi)存,并使用字符指針來(lái)引用這塊內(nèi)存拣播。

以下是一個(gè)示例晾咪,展示如何動(dòng)態(tài)分配一個(gè)字符串并保存到字符指針變量中:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    const char *src = "Hello, World!"; // 源字符串
    size_t len = strlen(src) + 1; // 長(zhǎng)度加1以包含終止符'\0'
    char *dyn_str; // 聲明字符指針

    // 使用malloc在堆上動(dòng)態(tài)分配內(nèi)存
    dyn_str = (char *)malloc(len * sizeof(char));
    if (dyn_str == NULL) {
        // 分配內(nèi)存失敗,處理錯(cuò)誤
        perror("malloc failed");
        return EXIT_FAILURE;
    }

    // 復(fù)制字符串到動(dòng)態(tài)分配的內(nèi)存中
    strcpy(dyn_str, src);

    // 使用動(dòng)態(tài)分配的字符串
    printf("Dynamic string: %s\n", dyn_str);

    // 釋放動(dòng)態(tài)分配的內(nèi)存
    free(dyn_str);

    return EXIT_SUCCESS;
}

在這個(gè)示例中贮配,我們首先計(jì)算了源字符串src的長(zhǎng)度(包括終止符'\0')谍倦,然后使用malloc函數(shù)在堆上分配了相應(yīng)大小的內(nèi)存。如果malloc成功泪勒,它返回一個(gè)指向新分配內(nèi)存的指針昼蛀,我們將這個(gè)指針賦值給dyn_str。接下來(lái)圆存,我們使用strcpy函數(shù)將源字符串復(fù)制到這塊新分配的內(nèi)存中叼旋。最后,在使用完動(dòng)態(tài)分配的字符串后沦辙,我們使用free函數(shù)釋放了這塊內(nèi)存送淆,以防止內(nèi)存泄漏。

請(qǐng)注意怕轿,在C語(yǔ)言中偷崩,沒(méi)有“字符串變量”這樣的概念。字符串是通過(guò)字符數(shù)組或字符指針來(lái)處理的撞羽。在這個(gè)例子中阐斜,dyn_str是一個(gè)字符指針變量,它指向一個(gè)動(dòng)態(tài)分配的字符數(shù)組(即字符串)诀紊。


什么是字符數(shù)組和字符指針

??在C語(yǔ)言中谒出,字符數(shù)組和字符指針都是用于處理字符串的重要概念,但它們之間存在一些關(guān)鍵的區(qū)別。

字符數(shù)組(Character Array)

??字符數(shù)組是一個(gè)可以存儲(chǔ)多個(gè)字符的連續(xù)內(nèi)存區(qū)域笤喳。這些字符可以是文本字符串的一部分为居,或者用于其他目的。字符數(shù)組在聲明時(shí)指定了大猩苯啤(即可以存儲(chǔ)的字符數(shù))蒙畴,并在棧上分配內(nèi)存。

示例:

char str[10]; // 聲明一個(gè)可以存儲(chǔ)最多9個(gè)字符和1個(gè)空字符('\0')的字符數(shù)組
strcpy(str, "Hello"); // 使用strcpy函數(shù)將字符串"Hello"復(fù)制到str數(shù)組中

在上面的示例中呜象,str是一個(gè)字符數(shù)組膳凝,它可以存儲(chǔ)最多10個(gè)字符。我們使用strcpy函數(shù)將一個(gè)字符串復(fù)制到這個(gè)數(shù)組中恭陡。

字符指針(Character Pointer)

??字符指針是一個(gè)變量蹬音,它存儲(chǔ)了一個(gè)內(nèi)存地址,這個(gè)地址指向一個(gè)字符或字符數(shù)組的首個(gè)元素休玩。字符指針通常用于引用字符串著淆,因?yàn)樽址趦?nèi)存中是以字符數(shù)組的形式存儲(chǔ)的。字符指針本身并不存儲(chǔ)字符數(shù)據(jù)拴疤,而是存儲(chǔ)字符數(shù)據(jù)的地址牧抽。

示例:

char *ptr; // 聲明一個(gè)字符指針
ptr = "Hello"; // 使指針指向字符串字面量"Hello"的首個(gè)字符

在上面的示例中,ptr是一個(gè)字符指針遥赚,它指向字符串字面量"Hello"的首個(gè)字符。注意阐肤,字符串字面量在C語(yǔ)言中通常存儲(chǔ)在只讀的數(shù)據(jù)段中凫佛,因此你不應(yīng)該嘗試修改通過(guò)字符指針指向的字符串字面量的內(nèi)容。

關(guān)鍵區(qū)別

  1. 內(nèi)存分配:字符數(shù)組在聲明時(shí)分配了固定大小的內(nèi)存孕惜,而字符指針本身不分配內(nèi)存愧薛,它只存儲(chǔ)一個(gè)內(nèi)存地址。
  2. 生命周期:字符數(shù)組(如果在函數(shù)內(nèi)部聲明)的生命周期通常與它的作用域相同衫画。而字符指針可以指向在堆上動(dòng)態(tài)分配的內(nèi)存(使用malloccalloc)毫炉,其生命周期可以跨越多個(gè)函數(shù)調(diào)用。
  3. 修改性:字符數(shù)組的內(nèi)容是可以修改的(除非它被聲明為const)削罩,而字符指針指向的字符串字面量通常是不能修改的(因?yàn)樗鼈兪侵蛔x的)瞄勾。但是,如果字符指針指向的是動(dòng)態(tài)分配的內(nèi)存或可修改的字符數(shù)組弥激,那么其內(nèi)容是可以修改的进陡。
  4. 傳遞參數(shù):在函數(shù)參數(shù)傳遞中,字符數(shù)組和字符指針通常都被當(dāng)作指向字符數(shù)組首元素的指針來(lái)處理微服。但是趾疚,當(dāng)數(shù)組作為參數(shù)傳遞時(shí),它的大小在函數(shù)內(nèi)部通常是未知的(除非作為單獨(dú)的參數(shù)傳遞),而字符指針只傳遞了地址信息糙麦,不傳遞大小信息辛孵。
  5. 字符串字面量:字符指針經(jīng)常用于指向字符串字面量,而字符數(shù)組則通常用于存儲(chǔ)和修改字符串赡磅。

什么是字符串字面量

??字符串字面量(String Literal) 在C語(yǔ)言和其他許多編程語(yǔ)言中是一個(gè)直接表示文本數(shù)據(jù)的常量魄缚。字符串字面量是由一對(duì)雙引號(hào)(")或單引號(hào)(',但單引號(hào)在C語(yǔ)言中用于表示字符字面量仆邓,而不是字符串)括起來(lái)的字符序列鲜滩。在C語(yǔ)言中,字符串字面量實(shí)際上是一個(gè)以空字符(\0节值,也稱(chēng)為null終止符)結(jié)尾的字符數(shù)組徙硅。

例如,在C語(yǔ)言中:

const char *str = "Hello, World!";

在這里搞疗,"Hello, World!" 就是一個(gè)字符串字面量嗓蘑。編譯器會(huì)為該字符串字面量分配內(nèi)存(通常在只讀的數(shù)據(jù)段中),并使其指向該內(nèi)存的首個(gè)字符匿乃。然后桩皿,str 這個(gè)字符指針被初始化為指向該字符串字面量的首字符。

值得注意的是幢炸,雖然字符串字面量在邏輯上看起來(lái)是一個(gè)字符數(shù)組泄隔,但你不能直接修改它的內(nèi)容(除非你將其復(fù)制到一個(gè)可修改的字符數(shù)組中)。嘗試修改字符串字面量的內(nèi)容通常會(huì)導(dǎo)致未定義的行為宛徊,因?yàn)樽址置媪客ǔ4鎯?chǔ)在只讀的內(nèi)存區(qū)域中佛嬉。

另外,C語(yǔ)言中的字符串字面量會(huì)自動(dòng)在末尾添加一個(gè)空字符(\0)闸天,以表示字符串的結(jié)束暖呕。這是C語(yǔ)言字符串處理函數(shù)(如strlenstrcpy等)能夠正確工作所必需的苞氮。

??在C語(yǔ)言中湾揽,字符串字面量就是字符串常量,它們存儲(chǔ)在程序的只讀數(shù)據(jù)段中笼吟,并且是不可修改的(即只讀的)库物。當(dāng)您在代碼中寫(xiě)下一個(gè)字符串字面量時(shí),如"Hello, World!"贷帮,編譯器會(huì)為該字符串分配內(nèi)存(在只讀數(shù)據(jù)段中)艳狐,并在編譯后的程序中包含這個(gè)字符串的副本。

嘗試修改字符串字面量會(huì)導(dǎo)致未定義的行為皿桑,因?yàn)榇蠖鄶?shù)操作系統(tǒng)會(huì)保護(hù)程序的只讀數(shù)據(jù)段以防止它被修改毫目。即使編譯器不直接阻止這種嘗試(例如蔬啡,通過(guò)允許您獲取字符串字面量的地址并嘗試修改它),這樣做也是非常危險(xiǎn)的镀虐,并且可能會(huì)導(dǎo)致程序崩潰或其他不可預(yù)測(cè)的行為箱蟆。

因此,當(dāng)您需要一個(gè)可以修改的字符串時(shí)刮便,應(yīng)該使用字符數(shù)組空猜,并在需要時(shí)通過(guò)函數(shù)(如strcpy)將字符串字面量的內(nèi)容復(fù)制到該數(shù)組中。這樣恨旱,您就可以安全地修改字符數(shù)組的內(nèi)容辈毯,而不會(huì)影響到原始的字符串字面量。


char *作為函數(shù)返回值時(shí) 常見(jiàn)錯(cuò)誤

//這樣會(huì)報(bào)錯(cuò)搜贤,因?yàn)閟tr數(shù)組元素為局部變量谆沃,存儲(chǔ)在棧內(nèi),函數(shù)結(jié)束后仪芒,內(nèi)容失效
char* func(char* name)
{
    char str[5];
    strcpy(str,name);
    return str;
}

??代碼片段中的錯(cuò)誤在于func函數(shù)試圖返回一個(gè)指向局部數(shù)組str的指針唁影。由于str是局部變量,它存儲(chǔ)在棧上掂名,并且當(dāng)func函數(shù)返回時(shí)据沈,它的內(nèi)存會(huì)被釋放(或者說(shuō)它的內(nèi)容不再保證有效)。因此饺蔑,任何試圖訪問(wèn)通過(guò)該函數(shù)返回的指針?biāo)赶虻膬?nèi)容的行為都是未定義的锌介,很可能導(dǎo)致程序崩潰或產(chǎn)生不可預(yù)料的結(jié)果。

以下是幾種解決方案:

解決方案1:使用靜態(tài)數(shù)組

靜態(tài)數(shù)組的生命周期是整個(gè)程序的執(zhí)行期間猾警,因此它不會(huì)在函數(shù)返回時(shí)被銷(xiāo)毀孔祸。但是,這種方法在多線程環(huán)境或需要連續(xù)調(diào)用函數(shù)且每次返回不同結(jié)果的情況下可能會(huì)導(dǎo)致問(wèn)題肿嘲,因?yàn)殪o態(tài)數(shù)組的狀態(tài)會(huì)被保留。

char* func(const char* name)
{
    static char str[5]; // 注意:靜態(tài)數(shù)組大小應(yīng)足夠大以容納整個(gè)字符串和終止符
    if (strlen(name) >= sizeof(str)) {
        // 處理錯(cuò)誤筑公,例如返回NULL或設(shè)置錯(cuò)誤標(biāo)志
        return NULL;
    }
    strcpy(str, name);
    return str;
}

解決方案2:動(dòng)態(tài)分配內(nèi)存

在堆上動(dòng)態(tài)分配內(nèi)存雳窟,并返回指向該內(nèi)存的指針。調(diào)用者有責(zé)任在適當(dāng)?shù)臅r(shí)候釋放這塊內(nèi)存匣屡。

char* func(const char* name)
{
    char* str = malloc(strlen(name) + 1); // 分配足夠的空間來(lái)存儲(chǔ)字符串和終止符
    if (str == NULL) {
        // 處理內(nèi)存分配失敗的情況
        return NULL;
    }
    strcpy(str, name);
    return str;
}

注意:調(diào)用者現(xiàn)在需要調(diào)用free來(lái)釋放內(nèi)存封救。

解決方案3:使用調(diào)用者提供的緩沖區(qū)

讓調(diào)用者提供一個(gè)緩沖區(qū),并將結(jié)果復(fù)制到這個(gè)緩沖區(qū)中捣作。這樣誉结,內(nèi)存管理就完全由調(diào)用者負(fù)責(zé)。

void func(const char* name, char* buffer, size_t bufferSize)
{
    if (strlen(name) >= bufferSize) {
        // 處理錯(cuò)誤券躁,例如設(shè)置錯(cuò)誤標(biāo)志或記錄日志
        return;
    }
    strncpy(buffer, name, bufferSize - 1); // 復(fù)制字符串惩坑,但保留一個(gè)位置給終止符
    buffer[bufferSize - 1] = '\0'; // 確保字符串被正確終止
}

在這種情況下掉盅,調(diào)用者需要確保提供的緩沖區(qū)足夠大,以容納要復(fù)制的字符串和終止符以舒。同時(shí)趾痘,調(diào)用者不需要(也不應(yīng)該)釋放緩沖區(qū),因?yàn)樗皇怯?code>func函數(shù)分配的蔓钟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末永票,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滥沫,更是在濱河造成了極大的恐慌侣集,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兰绣,死亡現(xiàn)場(chǎng)離奇詭異世分,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)狭魂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)罚攀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人雌澄,你說(shuō)我怎么就攤上這事斋泄。” “怎么了镐牺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵炫掐,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我睬涧,道長(zhǎng)募胃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任畦浓,我火速辦了婚禮痹束,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘讶请。我一直安慰自己祷嘶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布夺溢。 她就那樣靜靜地躺著论巍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪风响。 梳的紋絲不亂的頭發(fā)上嘉汰,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音状勤,去河邊找鬼鞋怀。 笑死双泪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的接箫。 我是一名探鬼主播攒读,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼辛友!你這毒婦竟也來(lái)了薄扁?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤废累,失蹤者是張志新(化名)和其女友劉穎邓梅,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體邑滨,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡日缨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掖看。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片匣距。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖哎壳,靈堂內(nèi)的尸體忽然破棺而出毅待,到底是詐尸還是另有隱情,我是刑警寧澤归榕,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布尸红,位于F島的核電站,受9級(jí)特大地震影響刹泄,放射性物質(zhì)發(fā)生泄漏外里。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一特石、第九天 我趴在偏房一處隱蔽的房頂上張望盅蝗。 院中可真熱鬧,春花似錦姆蘸、人聲如沸墩莫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)贼穆。三九已至题山,卻和暖如春兰粉,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顶瞳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工玖姑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愕秫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓焰络,卻偏偏與公主長(zhǎng)得像戴甩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闪彼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容