2016-11-24 2 views
0

я быстро вопрос по моим кодам:предупреждение неподписанных долго Int на языке C

int main(void) 
{ 
    int i,j,key[5][5],ikey[5][5],row,col,plen,suc; 
    int devide,count,h,k,no,p1[100],e1[100],d1[100]; 
    char p[100],e[100],d[100],clen; 

    printf("Enter your plaintext::::::::"); 
    gets(p); 
    plen = strlen(p); // this line gets error 

предупреждение линия:

plen = strlen(p); 

неявное преобразование теряет целочисленную точность без знака длиной в целое ,

+2

В чем вопрос? Это то, что 'strlen' возвращает тип' size_t'? –

+0

Я работаю над некоторыми упражнениями и получил предупреждение о том, что состояние: неявное преобразование теряет целую точность без знака long до int. 'plen = strlen (p);' this line. – misshyde

+0

'strlen' возвращает значение типа' size_t', которое является typedef для 'unsigned long int' на вашем компьютере. – skrtbhtngr

ответ

1

Правильная декларация:

#include <stddef.h> 

size_t plen; 
// ... 
plen = strlen(p); 

Как и другие уже указывали, strlen() возвращает size_t.

+0

@misshyde У вас нет. Просто используйте его. Это уже определено. –

2

Как уже упоминалось, функция strlen(p) возвращает значение типа size_t. Вот выдержка из стандарта C99:

size_t

, которая является целым числом без знака типа

Теперь дело здесь в том, что, какой именно тип он (unsigned, unsigned long и т.д.) на самом деле определяется реализацией, что означает, что он варьируется в зависимости от платформы. Очевидно, что вы должны это определить как unsigned long это означает, что

plen = strlen(p); 

конвертировать unsigned long в int, которые компилятор не может игнорировать, потому что в некоторых случаях это преобразование может привести к потере точности Значение в.

Смежные вопросы