【问题标题】:C strcpy and charC strcpy 和 char
【发布时间】:2012-10-17 12:49:23
【问题描述】:

我需要编写一个代码来实现这一点:您输入姓名和名字以及成绩。仅对于 >= 10 的成绩,您使用反向排序打印学生的姓名和名字。 示例:

鲍勃 迪伦 12 罗伯特 帕特 9 克里斯 斯特罗齐 15 乔什 站 11

会给:

克里斯·斯特罗齐 15 鲍勃·迪伦 12 乔什·斯塔 11.

我的错误在 strcpy 行:

函数'strncpy'的参数太少| assing '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);

          }
      }
}

【问题讨论】:

标签: c string strcpy


【解决方案1】:

temp_n 是单个 charstrcpy 接受char*

【讨论】:

  • 好的,我应该将 tmp_n 声明为 tmp_n[20] 吗?
  • 是的。因为您将字符串复制到另一个字符串而不是字符。尝试使用它。如果您没有其他错误,它应该可以工作。
  • 您对代码做了哪些其他更改?如果您将 char temp_n 替换为 char temp[SIZE],则此代码不应给出任何错误。可能您在执行此任务时又犯了一个错误
  • 您能否给我您的代码,以便我运行并检查它。不要贴在这里。粘贴到 paste.ubuntu.com 并粘贴后给我链接。
  • 不客气。你应该知道在这里感谢的最好方式是upvote :-P
【解决方案2】:
strncpy(tmp_n, tab_nom[j]);
/* ... */
strncpy(tmp_p,tab_prenom[j]);

您正试图复制单个字符中的字符串...此外,strncpy 有第三个参数 (size)。请改用strcpy

【讨论】:

    【解决方案3】:

    首先,您使用的是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]);,而不会出现任何编译错误。

    【讨论】:

    • "否则,您可以使用 strcpy(tmp_n, tab_nom[j]); 没有任何编译错误。" -> 但有警告和分段错误。
    • "好的,如果我尝试使用 strcpy,我应该将 tmp_n 声明为 tmp_n[20] 吗?"
    • strncpy(tmp_n,tab_nom[j],sizeof(tmp_n)); 这不是strncpy 的用法。
    • 搞错了,我需要strcpy。
    • @Yanis:是的,由于 strcpy 定义,您必须将 tmp_n 声明为 char 数组或字符指针。
    猜你喜欢
    • 2011-12-17
    • 2017-03-30
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多