如何通过 c 实现读取动态长度的字符串?
2023-04-23 阅读 52
在 C 语言中,可以使用 `fgets()` 函数来读取字符串。但是,如果要读取动态长度的字符串,我们需要使用 `fgets()` 函数的另一个特性——指定读取的最大字符数。
具体来说,可以先使用 `malloc()` 函数动态分配一段合适大小的内存,然后使用 `fgets()` 函数读取字符串。如果读取的字符串长度小于分配的内存大小,则可以使用 `realloc()` 函数将内存大小缩小到实际需要的大小。
以下是一个示例代码:
```c
#include
#include
#include
int main() {
char *str = NULL;
size_t len = 0;
ssize_t read;
printf("Enter a string: ");
read = getline(&str, &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()` 函数将分配的内存缩小到实际需要的大小。最后,我们释放了动态分配的内存。
更新于 2023年04月29日