如何清空C中的静态字符串数组

时间:2018-05-24 16:09:24

标签: c

我正在使用一个固定大小的字符串的全局数组来暂时存储来自stdin的输入。我在while循环中从stdin获取输入。我希望将每一行存储在该全局数组中,并在处理完第一行后将其清空,对于另一行,我也希望使用相同的数组。下面是我的高级代码

 char *tempArra[100];
  char line[1024];

 while(1){
      if (!fgets(line, 1024, stdin))
          return 0;
   // tokenize line and store in  tempArray
   //after done processing that line, empty tempArray to process anotherline

  }

我尝试了 memset(temparray,'\ 0',100); 无效。有什么帮助吗?

3 个答案:

答案 0 :(得分:1)

编辑:

使所有指针为NULL

memset(tempArra, 0, sizeof(tempArra));

如果你想让line字符串为零长度

 line[0] = 0;

或将其完全归零

 memset(line, 0, size of the `line`);
编辑前

您必须先分配内存:例如

 tempArra[x] = malloc(something);

然后你需要释放它

 free(tempArra[x]);

Yo也可以将NULL vaslue分配给数组元素,将其标记为空闲

 tempArra[x] = NULL;

答案 1 :(得分:1)

您执行memset的行:

memset(temparray, '\0', 100);

使用不同的变量名称( tempArra temparray 不是同一个变量)。试试这个:

memset(tempArra, 0, sizeof(tempArra));

答案 2 :(得分:0)

你的阵列是一群无处不在的piointers。你需要分配和然后复制。 strdup将为您完成

  char *tempArra[100];
  char line[1024];
int i = 0;
 while(1){
      if (!fgets(line, 1024, stdin))
          return 0;
   // tokenize line and store in  tempArray
   //after done processing that line, empty tempArray to process anotherline
    tempArra[i++] = strdup(line); <<<<<<<

  }