0

我有两个多维字符数组。他们可能有重复。我想清除第二个中的重复项。将第二个数组中的特定元素分配给NULL,清除它还是应该将它分配给“/0”。

for(i=0; i<10; i++){
   for(j=0; j<10; j++){
      if(!strcmp(a[x][i], b[x][j])){
      b[x][j]=NULL;
   }
   i++;
}

请给我你的意见。

4

1 回答 1

1

这真的取决于很多事情。

字符串是malloc'ed 吗?如果它们是,您可能应该将free它们设置为 NULL。然后,当您传递清理后的数组时,您需要检查字符串是否为NULL,然后再执行您需要对其执行的操作。

如果字符串是静态的,或者您不想释放它们,因为它们在其他地方使用,那么您可以将它们设置为NULL'\0'。如果您选择后者,那么您应该检查strlen(s) == 0or if s[0] == '\0'

问题是,你可以做任何一个,它可能并不意味着你选择什么。

编辑

我会澄清一点。

您需要做什么取决于您是否有一个char's 数组(以 '\0' 终止)或一个指向字符串的指针数组。

在第一种情况下,如果您想“删除”一个字符串,您可以将数组中的所有字符更改为 '\0',或者只更改第一个字符。并使用strlenor `s[0] == '\0' 来确定字符串是否为空。

在第二种情况下,您应该释放指针,并将其设置为NULL. 要检查字符串是否为“空”,请测试NULL.

区别在于 C 中的指针和数组之间的关系,这不是微不足道的,请参见此处

于 2013-04-29T18:40:49.227 回答