嘿,我想知道是否有人知道如何解决这个问题。我希望获取用户输入,并从该预制件中获取一些操作。现在我在scanf线上遇到了一个段错误,无法弄清楚原因。之后,我试图将两个数组连接在一起并提供帮助,这也很棒。
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
答案 0 :(得分:3)
代码中的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
我认为段错是由strcopy
的反向论据引起的。 fullName
中可能存在一些任意数据(因为它之前没有初始化),并且在尝试将其复制到firstName
(具有较小的大小)时,数据被写入超出边界的范围内。 malloc
也不是必需的,但它们不应该导致段错误,只会导致内存泄漏。
答案 1 :(得分:0)
sscanf(command,"%s %s %s %s %s\n", cmdstring, firstName, lastName, month, day);