2016-09-13 4 views
-2

Я получаю предупреждающее сообщение вроде: Ожидаемое 'int *', но аргумент имеет тип 'int **' Ниже приведено мой код:* expected 'int *', но аргумент имеет тип 'int **' * warning in 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 метод с & Długość как арг. Кто-нибудь знает, как я могу изменить это, чтобы оно работало без предупреждений?

+3

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

+0

Вы не можете передать аргумент 'int **', где ожидается 'int * '? – immibis

+3

Предупреждение кажется довольно четко сформулированным. Было бы хорошо, если бы вы могли объяснить, какую часть предупреждения вы не понимаете. – kaylum

ответ

4

изменение:

INT * Długość;

к:

междунар Długość;

В исходном коде dlugosc объявляется как указатель на целое число. Используя '&', когда вызывается szyfr(), вы передаете адрес указателя на целое (IE an int **) вместо указателя на целое число. Изменяя объявление dlugosc на int, вы можете ссылаться на его адрес, используя '&'.