我正在为学校创建一个“电话簿”程序。基本上,我必须让用户将其联系人的姓名和电话号码输入两个不同的数组。我没有考虑到这一点,但是在我不得不给用户一个选项,使其可以通过姓名或电话号码搜索联系人之后,我遇到了一些问题。

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <stdbool.h>

int main()
{
    int arraysize;
    printf("How many phone numbers will you be entering: ");
    scanf("%d", &arraysize);

    int * phoneNumbers = malloc(arraysize);
    char * names = malloc(arraysize);

    for (int i = 0; i < arraysize; ++i)
    {
        printf("Please enter the name of person %d: ", i + 1);
        scanf("%s", &names[i]);
        printf("Please enter %s's phone number: ", &names[i]);
        scanf("%d", &phoneNumbers[i]);
    }
    char * searchOption;

    printf("Would you like to seach via name or phone number? ");
    scanf("%s", &searchOption);

    if (strcmp(searchOption, "name") == 0)
    {
        char * searchName;
        int element;
        bool stop = false;
        while (stop = false)
        {
            searchName = NULL;
            printf("\nPlease enter the name you wish to search for: ");
            scanf("%s", &searchName);
            for (int i = 0; i < arraysize; ++i)
            {
                if (strcmp(searchName, names[i]) == 0)
                {
                    element = i;
                    stop = true;
                    break;
                }
            }
            if (stop = false)
            {
                printf("\nname not found, please search again!");
            }
        }
    }


我很确定它在strcmp()调用时崩溃了,但我不知道为什么

最佳答案

问题是,在

scanf("%s", &searchOption);


你这样做是错的。

你需要


首先将内存分配给searchOption指针(或使其成为数组)。
searchOption而不是&searchOption传递给scanf()


代码中的char * searchName;也会出现相同的问题。

10-04 19:09