嘿,我想知道是否有人知道如何解决这个问题。我想获取用户输入,并从预成型件中获得一些操作。现在我在扫描线上遇到了一个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);