扫描字符串输入会导致失败

时间:2015-05-08 07:50:50

标签: c scanf

我试图通过在函数中使用scanf()来获取输入字符串,但它一直在失败,我不知道为什么。

这是我的代码的一部分。

typedef struct node {           
    int id;
    char * name;
    char * address;
    char * group;      
    struct node * next;
} data;

void showG(data * head) {   
    char * n = "";
    int i = 0;
    data * current = head;
    scanf("%s", n);
    printf("The group of %s is\n", n);

    while (current != NULL) {
        if (0 == strcmp(current->group, n)) {
            printf("%d,%s,%s\n", current->id, current->name, current->address);
            i = 1;
        }

        current = current->next;
    }
    if (0 == i) {
        printf("no group found");
    }
}

1 个答案:

答案 0 :(得分:5)

在您的代码中,

char * n = "";

使n指向字符串文字,它通常位于只读内存区域,因此无法修改。因此,n不能用于扫描其他输入。你想要的是下面的

  • char数组,如

    char n[128] = {0};
    
  • 指向char并指向正确内存的指针。

     char * n = malloc(128);
    

    请注意,如果您使用malloc()n的使用结束后,您还需要free()内存,以避免内存泄漏。

    < / LI>

注意:解决上述问题后,请更改

scanf("%s", n);

scanf("%127s", n);

如果分配是128个字节,则为了避免内存溢出。