2016-09-13 76 views
-2

我收到如下警告消息:预期为'int *',但参数为'int **'类型 以下是我的代码:* expected'int *'but argument is of type'int **'*警告c

#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); 
} 

我正在那里我打电话szyfr法& dlugosc作为ARG此验证线。 任何人有任何想法,我怎么可以改变,使其工作没有警告?

+3

'int * dlugosc;' - >'int dlugosc;' – BLUEPIXY

+0

你不能在需要'int *'的地方传递'int **'参数吗? – immibis

+3

警告看起来很清楚。如果你能解释你不明白的警告部分,那将是一件好事。 – kaylum

回答

4

变化:

INT * dlugosc;

到:

INT dlugosc;

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