传递' new_student'的参数1从没有强制转换的整数生成指针

时间:2014-04-30 16:36:00

标签: c arrays struct

我正在尝试编辑一个结构数组。用户可以输入3个数字,每个数字执行不同的操作。例如,您可以通过键入:

来添加
1
1234 marvin

所有代码都在

之下
    void input_interpreter()
{   
    int input;
    char inputc1[106];
    scanf("%d", &input);

    switch(input)
    {
        case 0 :
            /*pretty self explanatory*/
            exit(0); 
            break;
        case 1 :
            /*add a student to the array*/
            scanf("%s", inputc1);
            new_student((string_split_string(inputc1),(string_split_int(inputc1)));/*<----the warning points here*/
            break;
        case 2 :
            /*Remove a specified student, (implicitly unenrolling them from all their units, if any), O(S + U).*/
            remove();
            break;
        case 3 :
            /*Print, in ascending numerical order of ID number, the ID numbers and names of the students in
            the database, O(S).*/
            print_array();
            break;
    }
     input_interpreter();
     return;
}

这是我用来分隔id和名称

的内容
    int string_split_int(char input_string[])
{
    char * ptr;
    int ID = 1;
    int  ch = " ";
    int i;
    int name_start;
    int array_length = sizeof(input_string);
    ptr =  strchr(input_string, ch);
    name_start = array_length - sizeof(ptr); /*may have to change this if names                  are including namespaces*/

    for(i = name_start; i >= array_length; i--)
    {
            ID=ID/10;
            ID=ID+input_string[i];
    }
    return ID;
}

char string_split_string(char input_string[])
{
    char * ptr;
    char name[100];
    int  ch = ' ';
    int i;
    int name_start;
    int array_length = sizeof(input_string);

    ptr =  strchr(input_string, ch);
    name_start = array_length - sizeof(ptr); /*may have to change this if names are including namespaces*/
    for(i = name_start; i <= array_length; i++)
    {
        name[i] = input_string[i];
    }
    return *name;
}


    void new_student(char *name, int ID)
{
    struct student s;       
    s.ID=ID;
    s.name=name;
    insert_array(s);
    return;
}

不幸的是,这会引发一个传递的参数1'new_student'从整数中生成指针而没有强制警告。

1 个答案:

答案 0 :(得分:2)

问题分析

根据签名

void new_student(char *name, int ID)

第一个参数必须是char *

然而根据电话

new_student((string_split_string(inputc1),(string_split_int(inputc1)));
/*<----the warning points here*/

和每个签名

char string_split_string(char input_string[]);

string_split_string()返回的类型,因此new_student()的第一个参数是char

简而言之,来电者提供char,其中被叫方需要char *

解决方案草图

分割字符串是一项相当常见的任务,在推出复杂的解决方案之前,请先进行一些(重新)搜索。

C

C ++