c中的字符串自动连接

时间:2014-04-04 11:00:21

标签: c arrays string struct linked-list

struct flight_list{
    char fcode[4];
    string20 srccity;
    string20 descity;
    int deptime;
    int duration;

};   

 void add_flight(string20 city[], struct flight_list flight_arr[]){
        int i,j;
        int check;
        char flight[MAX];
        string20 src;
        string20 choice;
        system("cls");
        do{
        while(strcmp(flight_arr[i].fcode,"")!=0)
        i++;
        do{
        check = 0;
        printf("flight code: ");
        scanf("%s",flight);
        flight[4] = '\0';
        strcpy(flight_arr[i].fcode,flight);

        for(j=0;j<i;j++){
            if(strcmp(flight_arr[j].fcode,flight_arr[i].fcode)==0){
                printf("not unique\n");
                getch();
                system("cls");  
                check = 1;  
            }

        }

        }while(check == 1);
        printf("source city: ");
        scanf("%s",src);
        strcpy(flight_arr[i].srccity,src);
        printf("%s",flight_arr[i].fcode);


        }while(strcmp(flight,"no")!=0);
    }

flight_arr [] .fcode与srccity连接我不知道为什么结构数组的所有值在进入这个函数之前都被初始化了,在这个函数中没有其他函数被用来连接任何字符串请帮助! / p>

2 个答案:

答案 0 :(得分:3)

struct flight_list{
    char fcode[4];

        scanf("%s",flight);
        flight[4] = '\0';
        strcpy(flight_arr[i].fcode,flight);

没有! flight_arr[i].fcode有4个字符的空格; flight[4]是第五个字符。

答案 1 :(得分:1)

我认为你并不了解PMG的答案。他没错。如果您宣布flight[4],则无法访问char fcode[4];,因为它只有0到3的点。没有第5点。您实际上正在滑动到与您想要的内存不同的内存。在C中,字符串应声明为包含的字符串大小+ 1(NULL)。所以,如果我想创建一个包含&#34; Hello&#34; (你好是5个字母)我会这样宣布:

char mystr[] = "Hello";

然后大小将由文字字符串输入确定 - 这是SIX而不是五,因为它需要另一个空间为NULL。 顺便说一下 - scanf("%s")自动结束字符串输入为NULL - 正如gets所做的那样 - 但我建议fgets()使用fgets(StringInput, StringSize, stdin); fgets(flight, 4, stdin);,在你的情况下使用{{1}} {{1}} 1}}那就是它。