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]
。