如何通过 c 实现读取动态长度的字符串?

2023-04-23 阅读 67

在 C 语言中,可以使用 fgets() 函数来读取字符串。但是,如果要读取动态长度的字符串,我们需要使用 fgets() 函数的另一个特性——指定读取的最大字符数。

具体来说,可以先使用 malloc() 函数动态分配一段合适大小的内存,然后使用 fgets() 函数读取字符串。如果读取的字符串长度小于分配的内存大小,则可以使用 realloc() 函数将内存大小缩小到实际需要的大小。

以下是一个示例代码:

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

int main() {
    char *str = NULL;
    size_t len = 0;
    ssize_t read;

    printf("Enter a string: ");
    read = getline(&amp;str, &amp;len, stdin);

    if (read == -1) {
        printf("Error reading input.\n");
        return 1;
    }

    // Remove newline character from the end of the string
    if (str[read - 1] == '\n') {
        str[read - 1] = '\0';
        read--;
    }

    printf("You entered: %s\n", str);

    // Shrink allocated memory to actual size
    str = realloc(str, read);
    if (str == NULL) {
        printf("Error shrinking memory.\n");
        return 1;
    }

    free(str);
    return 0;
}

在这个示例中,我们使用了 getline() 函数来读取动态长度的字符串,它会自动分配足够的内存来存储输入的字符串。然后,我们使用 realloc() 函数将分配的内存缩小到实际需要的大小。最后,我们释放了动态分配的内存。</string.h></stdlib.h></stdio.h>

更新于 2023年04月29日