【问题标题】:array of strings dynamically allocated in C在 C 中动态分配的字符串数组
【发布时间】:2015-12-04 12:16:51
【问题描述】:

我有一个问题: 我必须阅读文本(来自标准输入)并且我知道文本有多少行(N),它将是这样的: 句子1(输入) 句子2(输入) 句子3(输入)\0 我不知道每个句子中有多少个字符(数字会有所不同)。请帮忙

【问题讨论】:

    标签: c arrays string dynamic


    【解决方案1】:

    您正在阅读长度未知的行,但您知道有 N 行。

    char *lines[N]; // the array of pointers to your lines
    int i = 0;
    

    如果你知道最长的句子可能有多长,你可以声明一个大的字符数组来阅读每一行:

    char *buffer;  
    buffer = calloc(1000, sizeof(char)); // An arbitrary size. I made it up.
    

    然后使用 fgets() 从文件读取到缓冲区。 fgets() 将读取下一个换行符或 EOF,以先到者为准。

    然后将你的 malloc 空间的地址放入你的指针数组中:

    lines[i] = buffer;
    

    这样做的缺点是句子中浪费了大量空间。一种解决方法是在从文件中读取该行之后分配另一个字符数组:

     char *sentence = calloc(strlen(buffer)+1, sizeof(char));
     strcpy(sentence, buffer, strlen(buffer));
    

    然后将句子的地址放入你的指针数组中:

    lines[i] = sentence;
    

    如果任何句子的长度超过 1000 个字符,这一切都会崩溃。

    【讨论】:

      猜你喜欢
      • 2015-07-14
      • 2013-03-09
      • 2011-10-21
      • 2015-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-12-09
      相关资源
      最近更新 更多