为什么字符串字符在执行“战斗”功能时不改变?

以下代码是为“武器游戏(NOV19B-SC31)”编写的。 经过多次尝试,我观察到的问题是代码中的“战斗”功能能够读取但不能更改字符串中的各个字符。

从以下代码中, “ res”值相对于代码中提供的条件没有变化。初始化值,即0000000000,在整个代码中都保持不变。这样每次的答案都是0。

'''

#define Forn(i,N) for(i = 0;i<N;i++)

void battle(char *s1[11],char *s2[11])
{
int i;
Forn(i,10)
{
    if(s1[i]=='1' && s2[i]=='1'){
        s1[i]='0';
        s2[i]='0';
    }
    else if(s1[i]=='1' || s2[i]=='1'){
        s1[i]='0';
        s2[i]='1';
    }
    printf("%s %s\n",s1,s2);
}
}
int main(void) 
{
int t,count=0;
long long int n,i;
scanf("%d",&t);
while(t>0)
{
    scanf("%lld",&n);
    char s[n][11],res[11]="0000000000";
    Forn(i,n)
        scanf("%s",s[i]);

    Forn(i,n)
        battle(s[i],res);

    Forn(i,11)
    {
        if(res[i]=='1')
            count++;
    }
    printf("%d\n",count);
    t--;
}
return 0;
}

'''

示例输入: 1个 3 1110001101 1010101011 0000000011

示例输出: 4

说明: 示例情况1:如果第一人称击败第二人,则武器1、3、7和10被销毁。然后,如果第三人击败第一人(现在拥有武器2、5、8和9),则武器9被销毁,获胜者拥有武器2、5、8和10的武器,则意味着还有4件武器。

giftedhappy 回答:为什么字符串字符在执行“战斗”功能时不改变?

您将array of pointer作为battle函数的参数

void battle(char *s1[11],char *s2[11])

但是您需要array of characters

void battle(char s1[11],char s2[11])

如果启用了警告,

warning.c: In function ‘battle’:
warning.c:10: warning: comparison between pointer and integer
warning.c:10: warning: comparison between pointer and integer
warning.c:11: warning: assignment makes pointer from integer without a cast
warning.c:12: warning: assignment makes pointer from integer without a cast
warning.c:14: warning: comparison between pointer and integer
warning.c:14: warning: comparison between pointer and integer
warning.c:15: warning: assignment makes pointer from integer without a cast
warning.c:16: warning: assignment makes pointer from integer without a cast
warning.c:18: warning: format ‘%s’ expects type ‘char *’,but argument 2 has type ‘char **’
warning.c:18: warning: format ‘%s’ expects type ‘char *’,but argument 3 has type ‘char **’
warning.c: In function ‘main’:
warning.c:34: warning: passing argument 1 of ‘battle’ from incompatible pointer type
warning.c:5: note: expected ‘char **’ but argument is of type ‘char *’
warning.c:34: warning: passing argument 2 of ‘battle’ from incompatible pointer type
warning.c:5: note: expected ‘char **’ but argument is of type ‘char *’
本文链接:https://www.f2er.com/3161863.html

大家都在问