你能帮助我吗?
我对char* station;有问题
当我填补空白时,一切都很好,但是当我与printf("%d)Input its stations: ",i+1);在一起时。这是一个问题,我的意思是:我输入chech-joch-chor-dsh-dsh但我需要输入chech joch chor dsh dsh(这些是电台名称,这是一个示例)。因此它仅打印第一个单词,我不知道为什么..请检查一下。 ..(我知道我需要释放自己服用的东西)。请解释为什么是这样,为什么是第一个?..给我一个提示。

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>



typedef struct info_bus_{
    int number;
    int begin;
    int end;
    char* stations;
    int time_working;
}info_bus;


int main()
{

    info_bus *b=NULL;
    int i,n;
    char buffer[128];
    printf("How many buses u have: ");
    scanf("%d",&n);

    b=(info_bus *)malloc(n*sizeof(info_bus));

    for(i=0;i<n;i++){
    printf("Input the number of a bus: ");
    scanf("%d",&(b+i)->number);

    printf("%d)Input when it starts to work: ",i+1);
    scanf("%d",&(b+i)->begin);

    printf("%d)Input when it  finishes to work: ",i+1);
    scanf("%d",&(b+i)->end);

        printf("%d)Input its stations: ",i+1);
        scanf("%127s", buffer);
        b[i].stations = (char*) malloc(strlen(buffer) + 1);
        strcpy(b[i].stations, buffer);

    printf("Input time working: ");
    scanf("%d",&(b+i)->time_working);
    }
    for (i=0;i<n;i++){
        printf("\n[%d].the number of a bus: %d",i+1,b->number);
        printf("\n[%d]. Begin at: %d",i+1,b->begin);
        printf("\n[%d]. Finishes at: %d",i+1,b->end);
        printf("\n[%d]. Stations: %s",i+1,b->stations);
        printf("\n[%d]. Time working: %d",i+1,b->time_working);
        printf("\n");
    }

    return 0;
}


但是当我使用gets()
它是:
c - 结构和符号数组-LMLPHP

最佳答案

    scanf("%127s", buffer);


遇到换行符后停止阅读。如果您希望能够阅读多个单词,请使用fgets()

    fgets(buffer, sizeof buffer, stdin);


注意:如果有空格,fgets()还将读取换行符。您可以根据需要将其删除:

    buffer[strcspn(buffer, "\n")] = 0; /* to remove the newline */


通常,避免将scanf()甚至用于其他输入。容易出错。参见:Why does everyone say not to use scanf? What should I use instead?

同样,malloc()的强制转换也是不必要的。参见:What's wrong with casting malloc's return value?

10-06 07:05