2017-11-22 3 views
-1
#include<stdio.h> 
#include<conio.h> 
#include<string.h> 

void printlength(char a); 

void printlength(char a) 
{ 
    int len = strlen(a); 
    printf("The Length of the String %s is %d ", a, len); 
    getch(); 
} 

void main() 
{ 
    char a[25]; 
    clrscr(); 
    printf("Enter the name"); 
    scanf("%s", &a); 
    printlength(a); 
} 

방금 ​​C를 배우기 시작하고 이러한 오류가 발생했습니다. 내가 매개 변수의 재 선언에 C와 형식 불일치에 매개 변수 오류 오류 모두에게프로그래밍에서 형식이 일치하지 않습니다.

유형 불일치를 얻고 것은

+2

여기서 중지하십시오. C는 무작위로 배울 수있는 언어가 아니므로 C 책을 구하십시오. https://stackoverflow.com/questions/562303/the-definitive-c-book-guide-and-list – Stargateur

+0

컴파일러가 경고하지 않았습니까? –

+0

아니요 방금 오류가 표시되었습니다.문제를 해결하는 지금 –

답변

2

내가 바로 하나의 문제를 볼 수 있습니다

printf("The Length of the String %s is %d ",a,len); 

%s 문자열로 사용됩니다, 그리고 당신은 char을 전달하고 있습니다.

그리고, 나는 당신이 a& 제거해야한다, 당신은

void printlength(char *a) 

Additinally로 변경해야

printlength(a); 

그리고 a는 문자 배열이 여기 볼, 그래서 수 있습니다 scanf()을 사용하고 버퍼 오버플로가 발생하지 않도록하려면

scanf("%24s",a); 

C 프로그래밍의 교과서는 시작하기에 매우 좋으며, 컴파일러가 제공하는 경고를 살펴 봐도 피하는 것이 아니라 무언가를위한 것입니다. 시동기

0

C가 기준에 따라 파라미터없이 기능이 main

int main(void) 

형식 지정 %s 같은 선언은 유형한다 char *의 인수를 기대한다. 그래서 scanf의 호출로 문이

scanf("%24s", a); 

그것은 가정된다 쓰는 것이 더 안전하지만

scanf("%s", a); 
      ^^^ 

처럼 적어도 기록 된 문자열 기능 printlength 거래가.되어야한다 그래서

void printlength(const char *a); 
        ^^^^^^^^^^^^^ 

처럼 뾰족한 데이터가 매개 변수를 선언한다 기능이 변경되지 않도록 계정도 strlensize_t되는 표준 함수의 반환 형식을 복용. 따라서 변수 len은 유형이 size_t 인 것으로 선언되어야합니다.

그래서 함수 내 주에 비표준 기능 getch의 전화를 이동하는 것이 좋습니다

size_t len = strlen(a); 
printf("The Length of the String %s is %zu\n", a, len); 

이 있어야합니다.

int main(void) 
{ 
    //... 

    getch(); 
} 
관련 문제