2

如何删除字符串数组的前两个元素?我有一个类似这样的代码。

char *x[10];
..............
..............
..............
char *event[20];
event[0]=strtok(x[i]," ");
event[1]=strtok(NULL," ");
event[2]=strtok(NULL," ");
event[3]=strtok(NULL," ");
event[4]=strtok(NULL," ");
event[5]=strtok(NULL," ");
for(i=2;i<length;i++)
{
    strcpy(event[i-2],event[i]);
}

我观察到只有 event[0] 有正确的值。我在 for 循环之前打印了 event[][] 的内容,它显示正确。你能告诉我为什么这是错误的吗?和可能的解决方案?

4

1 回答 1

2

您不应该strcpy()在此代码中使用。在终止于发现的分隔符后,APIstrtok()将返回一个指向在原始源缓冲区中发现的分隔标记的指针。因此,您在 不应该使用的地方使用。strcpy()

您的events[]数组具有从返回的指针strtok()。只需抛出前两个指针并将其他指针向下移动:

for(i=2;i<length;i++)
    event[i-2] = event[i];
length -= min(length, 2);

注意:min()需要确保您的长度(有符号或无符号)永远不会低于零(如果有符号)或 UINT_MAX(如果无符号),以防length输入时尺寸过小。

于 2012-12-06T04:49:07.733 回答