为什么我在程序中用空格字符代替倒数第三个字符?

  • 本文关键字:字符 倒数 三个 程序 空格 c
  • 更新时间 :
  • 英文 :


为什么我在程序中用空格字符代替倒数第三个字符? 即使我更改字符串 str 变量,我也得到相同的结果。

#include <stdio.h>
#include <string.h>
void parser(char array[])
{
int a, b;
for (int i = 0; i < strlen(array); i++) {
if (array[i] == '>') {
a = i;
break;
}
}
for (int j = a; j < strlen(array); j++) {
if (array[j] == '<') {
b = j;
}
}
for (int p = 0, q = a + 1; p < b - a - 1, q < b; p++, q++) {
array[p] = array[q];
array[b - a] = '';
printf("%c", array[p]);
}
}
int main()
{
char str[] = "<h1>hello there i am programmer.</h1>";
parser(str);
return 0;
}

有很多东西可以在代码中写得更好,但它们不会影响结果。 产生意外结果的行是:

array[b-a]='';

当此for循环启动时...

for(int p=0,q=a+1;p<b-a-1,q<b;p++,q++){
array[p]=array[q];
array[b-a]='';
printf("%c",array[p]);
}

ab的值是332

该语句array[b-a]='';将 NUL 终止符字符放在array中的位置29

循环从p=0q=4(a+1)开始,一直重复,直到p达到28q到达31(q<b)*

p25时,q29并且array[29]在以前的迭代中被反复设置为'',因此''被复制到位置25并打印在屏幕上。

在循环之后,应仅设置 NUL 终止符一次。正确的位置是b-a-1,而不是b-a;您在for初始化 (p=0) 和退出条件 (p<b-a-1中正确表达了这一点。

总而言之,围绕最后一个for循环的代码应该是这样的:

for(int p=0, q=a+1;q<b;p++,q++){
array[p]=array[q];
printf("%c",array[p]);
}
array[b-a-1]='';

*由于逗号字符,忽略条件p<b-a-1。您可能希望在条件之间&,但它们是等效的,其中一个就足够了。

最新更新