2012-10-17 2 views
0

나는 다음과 같은 코드를 작성해야합니다. 이름과 이름, 등급을 입력하십시오. 학년> = 10 인 경우에만 학생의 이름과 이름을 역순으로 인쇄합니다. Exemple :C strcpy 및 char

 
Bob 
Dylan 
12 

Robert 
Patt 
9 

Chris 
Strozy 
15 

Josh 
Sta 
11 

가 제공됩니다

크리스 Strozy 15 밥 딜런 (12) 조쉬 역은

내 오류 11. strcpy를 라인에 있습니다

도 함수 'strncpy'에 대한 몇 가지 인수 | '를 strncpy'의 인수 1 assing 는 또한 strncpy 제 3 인수를 가지고 ... 캐스트

char tab_nom[N][M] ; 
char tab_prenom[N][M] ; 
float tab_notes[N]; 
char tmp_n, tmp_p; 
int i,j,tmp; 

for (i=0;i<N;i++) 
{ 
    printf("Saisissez le nom %d :", i+1); 
    scanf("%s",tab_nom[i]); 
    printf("Saisissez le prenom %d :", i+1); 
    scanf("%s",tab_prenom[i]); 
    printf("Saisissez la note %d :", i+1); 
    scanf("%f",&tab_notes[i]); 
    } 

for (i=0;i<N;i++) 
{ 
     for(j=0; j< N-1 ; j++) 
     { 
      if (tab_notes[j] < tab_notes[j+1]) 
      { 
       tmp=tab_notes[j]; 
       tab_notes[j]=tab_notes[j+1]; 
       tab_notes[j+1]=tmp; 

       strcpy(tmp_n,tab_nom[j]); 
       strcpy(tab_nom[j],tab_nom[j+1]); 
       strcpy(tab_nom[j+1],tmp_n); 

       strcpy(tmp_p,tab_prenom[j]); 
       strcpy(tab_prenom[j],tab_prenom[j+1]); 
       strcpy(tab_prenom[j+1],tmp_p); 

      } 
     } 
} 
+1

참조 소요 ['를 strncpy()'(http://en.cppreference.com/w/c/string/byte/strncpy) 아니, 처음 C를하고 ... – hmjd

+0

, 컴파일 오류없이 strcpy (tmp_n, tab_nom [j])를 사용할 수 있습니다. " ->하지만 경고와 세분화 오류가 있습니다. – hlx

답변

1

temp_n은 단일 char입니다. strcpychar*

+0

Ok tmp_n을 tmp_n [20]으로 선언해야합니까? – hlx

+1

예. 문자열을 char가 아닌 다른 STRING으로 복사하기 때문입니다. 그것을 사용해보십시오. 다른 실수가 없다면 효과가있을 것입니다. – taufique

+0

코드가 작동하지 않습니다. 코드는 "C0000005"오류 코드를 반환합니다. – hlx

0
strncpy(tmp_n, tab_nom[j]); 
/* ... */ 
strncpy(tmp_p,tab_prenom[j]); 

당신은 하나의 문자에 문자열을 복사하려고하지 않고 (size를) 정수의 포인터를 만든다 . 대신 strcpy을 시도하십시오.

0

우선 strncpy이 아니고 strcpy이 아닙니다.

char *strncpy(char *restrict s1, const char *restrict s2, size_t n); 

그래서 난 당신이 어떤 컴파일 오류없이 strcpy(tmp_n, tab_nom[j]);을 사용할 수 있습니다, 당신이 다른

strncpy(tmp_n,tab_nom[j],sizeof(tmp_n)); 

으로 코드를 변경하고 싶은 생각은 다음과 같이 strncpy에서의

정의입니다.

+0

"그렇지 – md5

+0

"좋아, strcpy로 시도하면 tmp_n [20]으로 tmp_n을 선언해야합니까?" – hlx

+0

'strncpy (tmp_n, tab_nom [j], sizeof (tmp_n));'이것은'strncpy'를 사용하는 방법이 아닙니다. – ouah