【问题标题】:warning: passing argument 2 of 'strcpy' makes pointer from integer without a cast [-Wint-conversion]|警告:传递 'strcpy' 的参数 2 使指针从整数而不进行强制转换 [-Wint-conversion]|
【发布时间】:2019-09-17 02:47:04
【问题描述】:

我尝试声明 char 但它不起作用。 为什么没有出现输出?每次我完成插入输入时程序崩溃。它也显示(注意:预期的'const char *',但参数的类型为'int'|)(警告:传递'strcpy'的参数2使指针从整数而不进行强制转换[-Wint-conversion]|)。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/**Functions**/
void info();
void mark();
void grade();
void report();

/**Variables**/
char stdID[15][20];
char subj[20][20];
char stdgrade[30][20];
int stdMark[30];
int subjTaken[30];


void mark()
{
    printf("Enter subject taken : ");
    scanf("%d", &subjTaken[i]);

    for(j=0;j<subjTaken[i]; j++)
    {
        printf("\nEnter subject : ");
        scanf("%s", &subj[j]);

        printf("Mark for the subject : ");
        scanf("%d", &stdMark[j]);
        grade();
    }
}
void grade()
{
        if((stdMark[i]=0)&&(stdMark[i]<=39))
            {
               strcpy(stdgrade[i],'G');
            }
            else if(stdMark[i]<45)
            {
                strcpy(stdgrade[i], 'E');
            }
            else if(stdMark[i]<50)
            {
                strcpy(stdgrade[i], 'D');
            }
            else if(stdMark[i]<55)
            {
                strcpy(stdgrade[i], 'C');
            }
            else if(stdMark[i]<60)
            {
                strcpy(stdgrade[i], 'C+');
            }
            else if(stdMark[i]<65)
            {
                strcpy(stdgrade[i], 'B');
            }
            else if(stdMark[i]<70)
            {
                strcpy(stdgrade[i], 'B+');
            }
            else if(stdMark[i]<80)
            {
                strcpy(stdgrade[i], 'A-');
            }
            else if(stdMark[i]<90)
            {
                strcpy(stdgrade[i], 'A');
            }
            else if (stdMark[i]<=100)
            {
                strcpy(stdgrade[i],'A+');
            }

}

【问题讨论】:

  • 变量i这里没有初始化scanf("%d", &amp;subjTaken[i]);
  • 这里 strcpy(stdgrade[i],'G'); strcpy() 第二个参数应该是 char* 类型,但你提供了 'G' 这是 char 类型。更正它。
  • 这里if((stdMark[i]=0)&amp;&amp;(stdMark[i]&lt;=39)) stdMark[i]=0 应该做什么?它是一个作业,你可能想使用== 或其他东西。
  • @Achal 在 C 'G' 中是一个 int。它是 C++ 中的一个字符。
  • = 使用 " " 而不是简单的引号 ' ' 应该会有所帮助

标签: c


【解决方案1】:

将您的第二个参数用双引号括起来。 “G”是一个字符(一个数字),其中“G”是一个字符串(一个字符数组)。函数 strcpy 不会自动将字符转换为字符串。

所以 strcpy(stdgrade[i],'G');实际上应该是 strcpy(stdgrade[i],"G");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    相关资源
    最近更新 更多