为什么总是获取字符串数组的最后一个元素?

乔恩

我正在尝试从文本文件中读取所有字符串,并将它们保存在字符串数组中。但是,当我尝试打印字符串数组的内容时,仅打印最后一部分。为什么我的代码只复制最后一个字符串?

我的密码

# include <stdio.h>
# define BUFFERSIZE 100

int main(int argc, char *argv[]){
   char buffer[BUFFERSIZE];

   int i = 0;
   char *text[BUFFERSIZE];

   while(fgets(buffer, BUFFERSIZE, stdin) != NULL){
          text[i] = buffer;
          i++;
   }

   int j = 0;
   for (j=0; j<sizeof(text)/sizeof(char); i++){
          printf("%s\n", text[j]);
   }

   return 0;
}

我的文字档

ESD can create spectacular electric sparks (thunder and lightning is a large-scale ESD       event), but also less dramatic forms which may be neither seen nor heard, yet still be large enough to cause damage to sensitive electronic devices.
Electric sparks require a field strength above about 4 kV/cm in air, as notably occurs in lightning strikes. Other forms of ESD include corona discharge from sharp electrodes and brush discharge from blunt electrodes.

输出量

>>> make 1_17; ./1_17 < example.txt
m blunt electrodes.

m blunt electrodes.

m blunt electrodes.

m blunt electrodes.

...
约书亚·泰勒(Joshua Taylor)

有两个问题。第一个是,对于您所有人i,都text[i]包含您多次使用的相同缓冲区。第二个是在您的打印代码中,您仅在打印text[0]

使用相同的缓冲区

仅声明了一个缓冲区,

char buffer[BUFFERSIZE];

当您在循环中多次修改其内容时,它始终是相同的缓冲区(即,内存中的相同存储区域),因此

text[i] = buffer;

使text包含的每个元素(的地址)相同buffer您需要的内容复制buffer到新字符串中,并将其存储在其中text[i]您可以使用,例如,strdup如果可以使用POSIX函数来复制字符串,如下所示:

text[i] = strdup(buffer);

strdup用途malloc分配空间的字符串,所以如果你在一个较大的应用程序中使用此,请务必free这些字符串后面。但是,在您的简单应用程序中,当应用程序退出时它们将被释放,因此您不会遇到太多麻烦。

如果您只能使用标准C函数,则可能需strcpy要这样做,这会使您做更多的工作。(您需要分配一个足够大的字符串以容纳的当前内容buffer,然后将buffer的内容复制到其中。之后,您仍然需要free它们。

仅打印 text[0]

但是,您的打印代码也有问题。你索引到textj,但从来没有改变j(你递增ii++),所以你总是打印相同的字符串(这实际上是第一个数组中,不到最后,但它的内容是一样的LSAT从文件中读取的字符串):

 int j = 0;
 for (j=0; j<sizeof(text)/sizeof(char); i++){
        printf("%s\n", text[j]);
 }

在第一个循环之后,i是您拥有的字符串数,因此您可能只需要:

int j;
for ( j=0; j < i; j++ ) {
  printf("%s\n", text[j]);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何获取字符串数组列表的最后一个元素?

来自分类Dev

如何获取字符串数组列表的最后一个元素?

来自分类Dev

获取字符串的最后一个单词

来自分类Dev

获取字符串/数组的最后一个值

来自分类Dev

获取字符串中的最后一个子字符串?

来自分类Dev

分割字符串并获取最后一个元素

来自分类Dev

获取拆分字符串的最后一个元素

来自分类Dev

在Prolog中获取字符串的最后一个字符

来自分类Dev

获取字符串中的最后一个字符

来自分类Dev

获取字符串中最后一个空格之前的字符

来自分类Dev

使用`format`获取字符串的最后一个字符

来自分类Dev

获取字符串中的最后一个字符

来自分类Dev

在Prolog中获取字符串的最后一个字符

来自分类Dev

获取字符串中最后一个空格之前的字符

来自分类Dev

如何获取字符串中最后一个字符的位置?

来自分类Dev

如何获取字符串的最后一个字符

来自分类Dev

无法获取字符串的最后一个字符

来自分类Dev

如何获取字符串中的n个最后一个字母

来自分类Dev

如何提取字符串中的最后一个元素

来自分类Dev

从包含字符串的第一个元素到包含另一个元素的最后一个元素获取数组的切片

来自分类Dev

如何在字段的最后一个逗号后获取字符串

来自分类Dev

在最后一个“。”之后获取字符串。可能包含“。”

来自分类Dev

斯卡拉(Scala)。如何获取字符串中的最后一个单词

来自分类Dev

获取字符串中的最后一个数字块

来自分类Dev

strtok()-为什么必须传递NULL指针才能获取字符串中的下一个标记?

来自分类Dev

获取字符串的第一个实例和最后一个实例

来自分类Dev

JavaScript获取字符串在另一个字符串中的最后一个字符的位置

来自分类Dev

从另一个应用程序获取字符串数组

来自分类Dev

从变量 Windows NT 批处理 CMD 获取字符串的最后一个字符

Related 相关文章

  1. 1

    如何获取字符串数组列表的最后一个元素?

  2. 2

    如何获取字符串数组列表的最后一个元素?

  3. 3

    获取字符串的最后一个单词

  4. 4

    获取字符串/数组的最后一个值

  5. 5

    获取字符串中的最后一个子字符串?

  6. 6

    分割字符串并获取最后一个元素

  7. 7

    获取拆分字符串的最后一个元素

  8. 8

    在Prolog中获取字符串的最后一个字符

  9. 9

    获取字符串中的最后一个字符

  10. 10

    获取字符串中最后一个空格之前的字符

  11. 11

    使用`format`获取字符串的最后一个字符

  12. 12

    获取字符串中的最后一个字符

  13. 13

    在Prolog中获取字符串的最后一个字符

  14. 14

    获取字符串中最后一个空格之前的字符

  15. 15

    如何获取字符串中最后一个字符的位置?

  16. 16

    如何获取字符串的最后一个字符

  17. 17

    无法获取字符串的最后一个字符

  18. 18

    如何获取字符串中的n个最后一个字母

  19. 19

    如何提取字符串中的最后一个元素

  20. 20

    从包含字符串的第一个元素到包含另一个元素的最后一个元素获取数组的切片

  21. 21

    如何在字段的最后一个逗号后获取字符串

  22. 22

    在最后一个“。”之后获取字符串。可能包含“。”

  23. 23

    斯卡拉(Scala)。如何获取字符串中的最后一个单词

  24. 24

    获取字符串中的最后一个数字块

  25. 25

    strtok()-为什么必须传递NULL指针才能获取字符串中的下一个标记?

  26. 26

    获取字符串的第一个实例和最后一个实例

  27. 27

    JavaScript获取字符串在另一个字符串中的最后一个字符的位置

  28. 28

    从另一个应用程序获取字符串数组

  29. 29

    从变量 Windows NT 批处理 CMD 获取字符串的最后一个字符

热门标签

归档