string在c語(yǔ)言中的內(nèi)存分配

小樊
81
2024-08-27 11:33:03

在C語(yǔ)言中,字符串是一系列字符的集合,以空字符(‘\0’)結(jié)尾。字符串可以存儲(chǔ)在數(shù)組或指針中。關(guān)于內(nèi)存分配,有兩種常見(jiàn)的方法:

  1. 使用字符數(shù)組:
#include<stdio.h>

int main() {
    char str[20]; // 分配20個(gè)字符的內(nèi)存空間
    scanf("%s", str);
    printf("Input string: %s\n", str);
    return 0;
}

在這個(gè)例子中,我們使用一個(gè)大小為20的字符數(shù)組來(lái)存儲(chǔ)字符串。注意,當(dāng)使用scanf()函數(shù)時(shí),需要確保輸入的字符串長(zhǎng)度不超過(guò)數(shù)組的大小,否則會(huì)導(dǎo)致緩沖區(qū)溢出。

  1. 使用動(dòng)態(tài)內(nèi)存分配(malloc/calloc):
#include<stdio.h>
#include <stdlib.h>
#include<string.h>

int main() {
    char *str;
    int size;

    printf("Enter the size of the string: ");
    scanf("%d", &size);

    str = (char *)malloc((size + 1) * sizeof(char)); // 分配內(nèi)存空間
    if (str == NULL) {
        printf("Memory allocation failed.\n");
        exit(1);
    }

    printf("Enter the string: ");
    scanf("%s", str);
    printf("Input string: %s\n", str);

    free(str); // 釋放內(nèi)存空間
    return 0;
}

在這個(gè)例子中,我們使用malloc()函數(shù)動(dòng)態(tài)地分配內(nèi)存空間來(lái)存儲(chǔ)字符串。注意,我們需要額外分配一個(gè)字節(jié)來(lái)存儲(chǔ)空字符(‘\0’)。在程序結(jié)束時(shí),使用free()函數(shù)釋放已分配的內(nèi)存空間。

0