C移位数组

C移位数组,c,arrays,C,Arrays,我一直在尝试使用一个字符数组,其中一些索引包含字符,而另一些索引包含空字符,并将其更改为仅包含字符的数组-在需要时切换索引以删除空空格 这是我目前的做法: char *args[256]; void removeNulls(){ for(int i=0; i<=token; i++){ if(args[i] == '\0'){ shiftleft(i); } } } void shiftleft(int sta

我一直在尝试使用一个字符数组,其中一些索引包含字符,而另一些索引包含空字符,并将其更改为仅包含字符的数组-在需要时切换索引以删除空空格

这是我目前的做法:

char *args[256];
void removeNulls(){
    for(int i=0; i<=token; i++){
        if(args[i] == '\0'){
            shiftleft(i);
        }
       }
}

void shiftleft(int start){
    for(int i=start; i<token; i++){
            *(args+i) = *(args + i +1);
                }
}
char*args[256];
删除无效项(){

对于(int i=0;i每次命中空值时,都会跳过一个索引,因为即使在跳过时,也总是递增
i
。只有在不跳过时,才应递增
i
,例如:

for (int i=0; i<=token; ) {
    if (args[i] == '\0') {
        shiftleft(i);
    } else {
        i++;
    }
}

for(int i=0;i每次命中空值时,都会跳过一个索引,因为即使在跳过时,也总是递增
i
。只有在不跳过时,才应递增
i
,例如:

for (int i=0; i<=token; ) {
    if (args[i] == '\0') {
        shiftleft(i);
    } else {
        i++;
    }
}
for(int i=0;i当i=0时,调用shiftleft(0)时

(args+i)->(args+0)->“null”所指地址处的任何值都将替换为(args+i+1)->(args+0+1)->“null”

这就是您的输出打印空值1,2,3,4的原因

将输入更改为null,1,2,3,4,您将看到差异。当i=0时,当调用shiftleft(0)时,输出将为1,2,3,4

(args+i)->(args+0)->“null”所指地址处的任何值都将替换为(args+i+1)->(args+0+1)->“null”

这就是您的输出打印空值1,2,3,4的原因


将您的输入更改为null,1,2,3,4,您将看到差异。然后输出将为1,2,3,4

您可以显示您的完整程序吗?它不会编译。顺便说一句,这里有一个方便的缩写
*(args+i)
:它可以(通常是)写成
args[i]
。你能展示一下你的完整程序吗?那不是编译的。顺便说一句,这里有一个方便的缩写
*(args+i)
:它可以(通常)写成
args[i]