【发布时间】:2016-01-04 15:15:24
【问题描述】:
我正在尝试在我的函数中执行以下操作,但不断收到分段错误错误。当我尝试使用 [iModify - 1] 作为我的索引时它失败了。
C 中不能使用 int 变量计算作为索引吗?
int modify(pb *PhoneBook)
{
int x;
int iModify = 0;
char name_num[] = {'\0'};
print(PhoneBook);
printf("\nWhich entry would you like to modify? ");
scanf("%d", &iModify);
printf("\niModify - 1: %d\n", iModify - 1);
printf("\nModify name or number? ");
scanf("%s", name_num);
convert_u(name_num);
if (strcmp(name_num, "NAME") == 0) {
printf("\nEnter new name: ");
scanf("%s %s", PhoneBook[iModify - 1].cFirstName, PhoneBook[iModify - 1].cLastName); //fails here
}
else if (strcmp(name_num, "NUMBER") == 0) {
printf("\nEnter new number: ");
scanf("%s", PhoneBook[iModify - 1].cNumber); //also fails here
}
}
【问题讨论】:
-
1.检查
scanf的返回值 2.scanf("%s", name_num);- 数组name_num只有一个字符! -
3.不要将 scanf 与普通 %s 一起使用:指定最大宽度
-
@Veltas:您可以指定最大值。字符串的字段宽度。
-
@Olaf 的意思是用“plain”来暗示这一点