2014-07-03 58 views
-3

我正在學習一年的C語言,這是我第一次得到這個警告。 這是我的代碼:警告:傳遞`atoi'的arg 1使得整型指針沒有轉換

#include <stdio.h> 
#include <stdlib.h> 
#include <winsock2.h> 
#include <windows.h> 
#include <string.h> 


int socket_creation(FILE* fp){ 
     int s; 
     s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
     if (s == INVALID_SOCKET){ 
       printf("Error occurred while creating socket: %d\n", WSAGetLastError()); 
       fprintf(fp, "Error occurred while creating socket: %d\n", WSAGetLastError()); 
     } 
     else{ 
       printf("Socket creation was successful.\n"); 
       fprintf(fp, "Socket creation was successful.\n"); 
     } 
     return s; 
} 


void connect_to_server(int s, struct sockaddr_in ClientService, FILE* fp){ 
     int cResult; 
     cResult = connect(s, (struct sockaddr*) &ClientService, sizeof(ClientService)); 
     if (cResult == SOCKET_ERROR){ 
       printf("connection to the server has been failed: %d\n", WSAGetLastError()); 
       fprintf(fp, "connection to the server has been failed: %d\n", WSAGetLastError()); 
       cResult = closesocket(s); 
       if (cResult == SOCKET_ERROR){ 
         printf("error occurred while trying to close socket. \n"); 
         fprintf(fp, "error occurred while trying to close socket. \n"); 
       } 
       WSACleanup(); 
     } 
     else{ 
       printf("Connection to serevr has been made successfully. \n"); 
       fprintf(fp, "Connection to serevr has been made successfully. \n"); 
     } 
} 

int send_to_serv(char buffer[], int s){ 
     int sendto; 
     sendto = send(s, buffer, 1024, 0); 
     if (sendto == -1) 
       printf("\nError: couldn't send the Code.\n", buffer); 
     else printf("\nCode: <%s> SENT.\n", buffer); 
     return sendto; 
} 

int recv_from_serv(int s, int* numberLines, FILE *fp){ 

     int recvfrom; 
     char buffer[1024] = ""; 

     recvfrom = recv(s, buffer, 1024, 0); 
     if (recvfrom == -1) 
     printf("\nError: couldn't receive Code. !\n"); 
     else printf("\nRespond: <%s>, RECEIVED. \n", buffer); 
     fprintf(fp, "\n"); 
     fprintf(fp, buffer); 

     *numberLines = atoi(buffer + 3); 
     return recvfrom; 
} 

int main() { 

     WSADATA info; 
     int error, s; 
     int sResults, sendError, recvError,convert2; 
     char buffer[1024] = ""; 
     char recvbuf[1024] = ""; 
     int numberLines, i, temp, convert; 
     char converted_num[1024] = ""; 
     struct sockaddr_in ClientService; 
     FILE *fp = fopen("stored_data.txt", "w"); 
     char **lines_array = NULL; 
     error = WSAStartup(MAKEWORD(2, 0), &info); 

     if (error != 0){ 
       printf("WSAstartup failed with error: %d\n", error); 
       exit(1); 
     } 

     s = socket_creation(fp); 

     ClientService.sin_family = AF_INET; 
     ClientService.sin_addr.s_addr = inet_addr("54.209.143.42"); 
     ClientService.sin_port = htons(6714); 

     connect_to_server(s, ClientService, fp); 

     strcpy(buffer, "100"); 
     sendError = send_to_serv(buffer, s); 
     recvError = recv_from_serv(s, &numberLines, fp); 

     strcpy(buffer, "400"); 
     sendError = send_to_serv(buffer, s); 
     recvError = recv_from_serv(s, &numberLines, fp); 
     printf("\nNumber of Lines are: %d\n", numberLines); 

     lines_array = malloc(sizeof(char*)*numberLines); 
     temp = numberLines; 

     for (i = 0; i < temp; i++){ 
       convert = 5000001 + i; 
       _itoa(convert, converted_num, 10); 
       sendError = send_to_serv(converted_num, s); 
       convert2=atoi(convert); 
       convert=convert%10000; 
       if(convert2==0) { 
         for(i=0; i<=1024; i++) { 
           buffer[i]=0; 
         } 
         lines_array= (convert); 
         recv_from_serv(s, &numberLines, fp); 
       } 
       else{ 
         for(i=0; i<=1024; i++) { 
           buffer[i]=0; 
           fprintf(fp, "\n"); 
           fprintf(fp, buffer); 
         } 
       } 
     } 

     close(fp); 
     system("PAUSE"); 
     return 0; 
} 

輸出: finalproject1.c:110:警告:傳遞'的atoi」的ARG 1時將整數指針不進行強制轉換

它的意思是,我有行號110的問題:

convert2=atoi(convert); 
+5

請不要張貼代碼牆壁,只交顯示您的問題的相關代碼。另外,'atoi'需要一個'char *'參數,你不能僅僅傳遞一個'int',因爲它們甚至不是相同的類型。 –

+0

這個錯誤是由給一個指針指定一個int值造成的,例如'void * p = 10;' – humodz

回答

0

您正在調用atoi on convert,它是一個int。

此前你似乎使用_itoa已經把相關的值到converted_num,所以你可能想傳遞converted_num到ATOI而不是將轉換爲它:

convert2=atoi(converted_num); 
相關問題