首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"char“类型的参数与char*类型的参数不兼容

"char“类型的参数与char*类型的参数不兼容
EN

Stack Overflow用户
提问于 2013-02-26 10:22:34
回答 2查看 12.8K关注 0票数 0

我一直收到这个错误,不确定如何修复它。我是个C编程新手,我试着在书和互联网上搜索,但找不到太多的帮助。我正在尝试创建一个程序,它将使用循环和结构打印成绩报告

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Grades
{
    char Name[20];
    char Hrs;
    int ID;
    char ClassName[20];
    char Grade;
    char ClassID[6];
};

int main ()
{
    struct Grades Transcript[6];
    int classCnt = 0;
    int vHrs=0;
    char vGrade[2];
    char vName[20], vCID[6], vClassName[20];

    printf("Enter Students Name: ");
    fgets(vName, 20, stdin);

    do
    {   printf("Enter Class ID; ");
        fgets(vCID, 6, stdin);
        strcpy_s(Transcript[classCnt].ClassID, vCID);
        printf("Enter Class Name: ");
        fgets(vClassName, 20, stdin);
        strcpy_s(Transcript[classCnt].ClassName, vClassName);
        printf("Enter Class Hours: ");
        scanf("%d", &vHrs);
        strcpy(Transcript[classCnt].Hrs, vHrs);         //Problem occurs here
        printf("Enter Class Grade: ");
        scanf("%c", vGrade);
        strcpy(Transcript[classCnt].Grade, vGrade);     //Problem occurs here
        classCnt++;
    }while(classCnt<=6);
}
EN

回答 2

Stack Overflow用户

发布于 2013-02-26 10:35:58

实际上,您在这里有许多问题:

首先,strcpy()是用来复制字符串的,如果你有一个字符并且你想让它赋值,你可以简单地用=操作符来赋值它。当您有一个要分配的字符数组时,将使用strcpy()函数。

所以你的第一个问题

代码语言:javascript
复制
strcpy(Transcript[classCnt].Hrs, vHrs);

结构中的Hrs只是一种char类型,而vHrs是一种int类型。您可以像这样简单地分配它:

代码语言:javascript
复制
Transcript[classCnt].Hrs = vHrs;

然而,int可以容纳比char多得多的数据,这会给你一个关于溢出的警告,你应该倾听它(取决于char持有-128到127的实现,其中int持有−2,147,483,648到2,147,483,647)。确定您在这里真正想要的数据类型,将Hrs设置为int或将vHrs设置为char,然后执行赋值操作。

第二个问题:

代码语言:javascript
复制
scanf("%c", vGrade);

vGrade作为字符数组(它由多个字符组成),这意味着您应该使用字符串格式运算符"%s"为其赋值,但是当您使用字符串时,您应该使数组足够长,以满足您想要的字符数+1(对于NULL结束符)。

第三个问题:

代码语言:javascript
复制
strcpy(Transcript[classCnt].Grade, vGrade);

Grade是一个char,而vGrade是一个数组。同样,你必须决定类型,如果你想要一个字符的“字符串”,那么你需要让它们都成为数组,如果你只想要一个字符,那么改变vGrade的类型,并用=运算符做一个简单的赋值。

票数 1
EN

Stack Overflow用户

发布于 2013-02-26 10:33:17

您在这里遇到的问题是数据输入错误。

结构成员.Hrs的类型为"char"strcpy的参数是一个"char *"。可以这样想:char是一个8字节的数字,用ASCII码表示一个值。"char *"是指向字符数组(或C语言中的字符串)的指针。

上述情况在传统上是正确的,但今天它也可能是unicode或多字节字符串。在这两种情况下,您需要的都是赋值操作符(=),而不是strcpy

因此,您告诉strcpy查看单个值(char),而不是它期望的值字符串(char *)作为它的参数。在这种情况下,您可以直接使用scanf复制您扫描的整数的值。

代码语言:javascript
复制
Transcript[classCnt].Hrs = vHrs;

代码语言:javascript
复制
Transcript[classCnt].Grade = vGrade;

如果你正在寻找有史以来写得最好的书,在我看来:-),在C语言上,看看:C编程语言(第二版)-看起来它在亚马逊(或者在你最喜欢的二手书销售商)上可以买到,大约21美元(美元)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15080270

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档