*预期' int *'但是参数的类型为' int **' * c中的警告

时间:2016-09-13 22:42:50

标签: c arrays pointers

我收到的警告信息如下: expect' int *'但参数类型为' int **' 以下是我的代码:

#include<string.h>
#include<stdio.h>
#define MAX_DL_SLOWA 30


void  szyfr(char oryginalne[MAX_DL_SLOWA], int* dlugosc, int zaszyfrowane[MAX_DL_SLOWA+1]) {
     int  i, j;
     *dlugosc = strlen(oryginalne);
     for (i = 0; i < *dlugosc; i++) {
       if (i < *dlugosc-1){
                j = i + 1;
       }else{
            j = i + 1 - *dlugosc;
       }
       zaszyfrowane[i] = (int)oryginalne[j] - (int)'a';
     }
}

void main(){

    char slowo[MAX_DL_SLOWA];
    int* dlugosc;
    int kod[MAX_DL_SLOWA+1],i;

    //Wczytanie i szyfrowanie
    printf("Podaj slowo: ");
    scanf("%s",&slowo);
    printf("\nTwoje slowo: %s",slowo);
    szyfr(slowo, &dlugosc, kod);
    printf("\nTwoj kod: %s",kod);   
}

我正在获取此验证行,其中我使用&amp; dlugosc 作为arg调用 szyfr 方法。 任何人都知道我怎么能改变它,使它没有警告?

2 个答案:

答案 0 :(得分:4)

变化:

  

int * dlugosc;

为:

  

int dlugosc;

在原始代码中,dlugosc被声明为指向整数的指针。使用'&amp;'当调用szyfr()时,您将指针的地址传递给整数(IE为int **),而不是指向整数的指针。通过将dlugosc的声明更改为int,您可以使用'&amp;'来引用其地址。

答案 1 :(得分:1)

我已经修改了您的代码,并且可以正常工作

void main(){

char slowo[MAX_DL_SLOWA];
int* dlugosc;
int kod[MAX_DL_SLOWA+1],i;

//Wczytanie i szyfrowanie
printf("Podaj slowo: ");
scanf("%s",&slowo[0]);
printf("\nTwoje slowo: %s",slowo);
szyfr(slowo, &dlugosc[0], kod);
printf("\nTwoj kod: %s",kod);   
}