C strcpy和char

时间:2012-10-17 12:49:24

标签: c string strcpy

我需要编写一个代码:您输入名称和名字以及成绩。仅对于等级> = 10,您才能使用向后排序打印学生的姓名和名字。 例:

Bob
Dylan
12

Robert
Patt
9

Chris
Strozy
15

Josh
Sta
11

会给:

  

Chris Strozy 15 Bob Dylan 12 Josh Sta 11。

我的错误是在strcpy行:

  

函数'strncpy'|的参数太少   将'strncpy'的参数1赋值为整数,而不使用强制转换

 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);

          }
      }
}

3 个答案:

答案 0 :(得分:1)

temp_n是一个charstrcpy需要char*

答案 1 :(得分:0)

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

您正在尝试在单个字符中复制字符串...此外strncpy有第三个参数(size)。请改为strcpy

答案 2 :(得分:0)

首先,您使用的是strncpy而不是strcpy

strncpy的定义如下

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

因此我认为您希望将代码更改为

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

否则,您可以使用strcpy(tmp_n, tab_nom[j]);而不会出现任何编译错误。