c-从scanf中获取任意数量的参数



嘿,我想知道是否有人知道如何解决这个问题。我想获取用户输入,并从预成型件中获得一些操作。现在我在扫描线上遇到了一个segfault,不知道为什么。在那之后,我将尝试将两个数组连接在一起,并在这方面提供帮助。

char command[1000];
char firstName[1000];
char lastName[1000];
char month[1000];
char day[1000];
while( strcmp("quit", &command[0]) != 0 ){
    fflush(stdin);
    printf("Please enter next command: ");
    scanf("%s", command);                    // <--- This is tested and working
    if(strcmp(&command[0], "quit") == 0){
        break;
    }
    else if(strcmp(&command[0], "empty") == 0){
        empty();
    }
    else if(strcmp(&command[0], "append") == 0){
        printf("--------->1");
        scanf("%s %s %s %s", firstName, lastName, month, day); //<--- This line :(
        printf("--------->2");  // <---- This never prints
        char fullName[2001];
        char birthday[2001];
        malloc(strlen(firstName) + 1);
        strcpy(firstName, fullName);
        malloc(strlen(lastName) + 1);
        strcpy(lastName, fullName);
        printf("%s", fullName);

来自终端:

gregs-mbp:desktop GregR$ ./blist
Please enter next command: append greg r jan 02
Segmentation fault: 11
gregs-mbp:desktop GregR$ ./blist
Please enter next command: append     
--------->1greg r jan 02
Segmentation fault: 11
gregs-mbp:desktop GregR$ 
gregs-mbp:desktop GregR$ ./bList
Please enter next command: quit
All done

您的代码中的scanf没有问题。问题出在代码中

    char fullName[2001];
    char birthday[2001];
    malloc(strlen(firstName) + 1);
    strcpy(firstName, fullName);
    malloc(strlen(lastName) + 1);
    strcpy(lastName, fullName);
    printf("%s", fullName);

这应该是类似的东西

    char fullName[2001];
    char birthday[2001];
    strcpy(fullName,firstName);
    strcat(fullName,lastName);
    printf("%s", fullName);

工作程序示例:http://ideone.com/dvpHYL

我认为segfault是由strcopy的相反论点引起的。fullName中可能有一些任意数据(因为它以前没有初始化),在尝试将其复制到firstName(其大小较小)时,数据被写入超出了界限。malloc也不是必需的,但它们不应该导致segfault,只会导致内存泄漏。

sscanf(command,"%s %s %s %s %sn", cmdstring, firstName, lastName, month, day);

相关内容

  • 没有找到相关文章

最新更新