我想删除它有“某事”的细胞:如何删除字符指针数组用C
char* a[200];
我应该怎么办呢?我尝试过,但它不起作用!
for(i=0;i<100;ti++)
{
if(strcmp(a[i],"sth")!=0)
temp[i]=a[i];
}
a=temp //not sure here
我想删除它有“某事”的细胞:如何删除字符指针数组用C
char* a[200];
我应该怎么办呢?我尝试过,但它不起作用!
for(i=0;i<100;ti++)
{
if(strcmp(a[i],"sth")!=0)
temp[i]=a[i];
}
a=temp //not sure here
像
j=0;
for(i=0;i<100;i++)
{
a[j]=a[i];
if(strcmp(a[i],"sth")) {
j++;
}else{
a[j]=0;
}
}
我没有免费的内存在这里,因为我不知道在哪里的字符串是从哪里来的。如果字符串被分配了malloc,它们应该被释放(如果不在其他地方使用)
将[j]设置为零除了在最后一次迭代中没有持久效果,因为在下一次迭代中将覆盖[j]。如果你的意图是在被保留的元素向下移动之后将a的所有尾随元素设置为零,那么更好的方法是在第二个循环中将它们设置为零,然后在第一个循环中将j从它的最终值循环到100.另外,在第一个循环中有一个错字:'ti ++'应该是'i ++'。 – 2012-08-10 10:42:09
我添加了a [j]来处理最后一个元素,而不在代码的末尾添加if语句。否则,如果最后一个元素是“sth”,它将被保留 – Gir 2012-08-10 10:46:54
添加'if(j <100)a [j] = 0;'实现相同的效果并且在计算上更便宜。但是有什么意义呢?它不能成为一个哨兵,因为如果j达到100时它不存在,它不会清除所有释放的元素,因为在[j]之后可能会有更多元素。 – 2012-08-10 12:22:33
您不能从这样的数组中删除单元格。您可以将其设置为任意值,如空字符串。
更难的方法是:
你可能想知道为什么这样简单的事情太复杂了。原因是数组是内存中的一系列数据。它的作用就像一个有很多抽屉的局。你可以告诉程序在抽屉里放什么东西,但是在不破坏整个局的情况下,你不能真正摆脱它的一部分。所以你必须做一个新的。
另外,在这种情况下,您可以设置一个“空”指针指向NULL,而不是字符串。然后,程序会在尝试访问指向的数据之前,检查每个指针是否针对NULL。 – Lundin 2012-08-10 10:47:48
'a = temp'不会被编译。 – cnicutar 2012-08-10 09:44:22
不知道你在努力达到什么目的。你是否想从数组中删除单个元素,因为那不是那么简单,还是你想要其他的东西? – 2012-08-10 09:44:36
从数组中删除单个元素。 – Sara 2012-08-10 09:45:23