gpt4 book ai didi

c - 根据 C 中的用户输入动态分配数组大小

转载 作者:行者123 更新时间:2023-12-04 01:39:39 26 4
gpt4 key购买 nike

我是 C 的新手,所以我在处理 Java 已经在后台为我完成的所有事情时遇到了一些麻烦。基本上我想要实现的是:

  • 声明一个没有指定大小的字符数组
  • 要求用户输入一个字符串(单个单词或短语)
  • 设置前一个 char 数组的大小为输入字符串的长度(动态地)
  • 将输入的字符串放入char数组中

我试过使用 scanf 但它似乎无法将字符串作为 char(?) 数组处理,所以我无法处理变量我还阅读了有关动态为数组分配空间的 malloc() 函数的信息,因此我可以使用它将数组的大小设置为字符串的 strlen,然后将 '\0' 放在末尾(就像 .asciiz在某些汇编语言中),但我不知道如何关联 malloc 和输入字符串。任何帮助,将不胜感激!感谢您的关注

最佳答案

您可以使用 getline读取整行,而不必担心在读取期间管理内存。该函数仅在 POSIX.1-2008 中标准化,因此如果您使用 glibc,则需要使用 -D_POSIX_C_SOURCE=200809L 进行编译,例如。

总结链接文档:getline 接受一个指向字符串的指针,如果字符串为 NULL 且大小为 0,它将完全为您分配内存。它如果分配内存失败(例如,输入多于可用内存)或立即到达输入末尾,则返回 −1。您始终必须释放以这种方式分配的内存,即使失败也是如此。

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

int main(void) {
size_t input_size = 0;
char* input_line = NULL;

if (getline(&input_line, &input_size, stdin) == -1) {
free(input_line);
perror("Failed to read input");
return EXIT_FAILURE;
}

printf("Got input: '%s'\n", input_line);
free(input_line);
}

关于c - 根据 C 中的用户输入动态分配数组大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com