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

如何在C中清空字符串的静态数组,c,C,我正在使用一个固定大小的字符串的全局数组来临时存储来自stdin的输入。我在while循环中从stdin获取输入。我希望将每一行存储在该全局数组中,并在它处理第一行之后清空它,对于另一行,我也希望使用相同的数组。下面是我的高级代码 char *tempArra[100]; char line[1024]; while(1){ if (!fgets(line, 1024, stdin)) return 0; // tokenize line and

我正在使用一个固定大小的字符串的全局数组来临时存储来自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)不起作用。有什么帮助吗?

编辑: 使所有指针为空

memset(tempArra, 0, sizeof(tempArra));
如果要使
字符串长度为零

 line[0] = 0;
或者完全归零

 memset(line, 0, size of the `line`);

编辑前 您必须首先分配内存:例如

 tempArra[x] = malloc(something);
然后你需要释放它

 free(tempArra[x]);
Yo还可以将NULL vaslue分配给数组的元素,以将其标记为free

 tempArra[x] = NULL;

执行memset的行:

memset(temparray, '\0', 100);
使用不同的变量名(tempArra与temparray不是同一个变量)。请尝试以下方法:

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

你的数组是一个无处可去的指针数组。您需要分配然后复制
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); <<<<<<<

  }
char*tempArra[100];
字符行[1024];
int i=0;
而(1){
如果(!fgets(第1024行,标准输入))
返回0;
//标记行并存储在临时数组中
//处理完该行后,清空tempArray以处理另一行

tempArra[i++]=strdup(行);显示完整代码,以及如何“标记化”它。如果要在处理第一行后清除它,为什么要存储全局数组中的所有行?当然,在处理它时,您只需要能够存储一行?我猜
tempArray
只是
strtok
中的一组指针,它们实际上是指向位置的s在
行中
。通常一个存储有效项目的数量;一个“清除”通过将有效项目数设置为0的数组此问题应因缺少而关闭。所有答案和注释都基于对不可见代码的推测。我认为
tempArra
应该是指向
行的指针数组。但是OP中没有足够的信息为正。将所有位设置为zero不保证空指针。在所有现有机器上都保证空指针。在所有现代机器上,带有空赋值的循环被编译到单个memset。理论上,cast
(void*)0 < /COD>是定义的实现,但是在现实世界中我没有看到这样的实现。@ Maxe1好奇,什么平台,如果有的话,你知道把所有位设置为零不会导致空指针吗?@ CHUX检查链接,但是它是C++。在一个空指针中-如.No中所述。他写道指针引用了行数组的一个元素。