c - 从 C 中的输入动态读取字符串

标签 c string dynamic malloc allocation

我正在尝试读取用户输入的值并将其存储在字符串中。字符串必须是逗号之前或行尾的所有字符,并且需要输出逗号或EOF。

我试图读取每个字符并根据需要在字符串中分配空间,但文件在读取第一个输入后停止。

这是我到目前为止所拥有的:

char read_data(char** str) {
  char c = 'n';
  int size = sizeof(**str);

  int i = 0;
  while (((c = getchar()) != COMMA) && (c != NEWLINE)) {
    size += sizeof(c);

    *str = (char*) realloc(*str, size + 1);
    assert(*str);

    *str[i] = c;
    i++;

  }

  *str[i] = '\0'; //terminator
  return c;
}

int main(int argc, char const *argv[]) {
  char* string = NULL;
  char left;
  left = read_data(&string);
  printf("left: %c\n", left);
  printf("string: %s\n", string);

  free(string);
  return 0;
}

我不明白为什么它会坏掉。有人有任何建议/想法吗?

最佳答案

因为array subscripting ([]) has higher precedence than indirection (*) ,当您编写 *str[i] 时,您会得到 *(str[i]) ——第 i 个字符串的第一个字符。但是,您想要 (*str)[i]

这里有四种方式来表达您的意思,所有这些都表示“字符串*str的第i个字符”:

(*str)[i]
str[0][i]
i[*str]
*(*str+i)

关于c - 从 C 中的输入动态读取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52031082/

相关文章:

c# - 在 IEnumerable<dynamic> 上使用 LINQ 时出现编译器错误,但如果先将其转换为 IEnumerable<dynamic> 则不会

c - Ubuntu 中的时间每次都返回 0/如何

c - 使 gcc/clang 将函数识别为内置函数

c - 字典顺序与未知字节大小比较 - 在​​ c 中

linux - 如何显示 Bash 字符串中包含的唯一单词?

java - 使用Reflections动态加载包中的所有类

vb.net - 在VB.Net中动态添加图片框

c++ - R 调用 C 代码比 C++ 函数调用 C 代码更快?

arrays - 如何为 Array<Object|string> 定义 PropType

C++ -- ' ' 之前的预期主表达式