2016-09-13 4644 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,您可以使用'&'來引用其地址。