C中的分段错误,函数为';t返回值

C中的分段错误,函数为';t返回值,c,segmentation-fault,cs50,C,Segmentation Fault,Cs50,我正在制作一个程序,搜索一张卡的名称,并根据卡在数组中的位置输出卡的价格。程序发现该卡很好,但问题在于拼写检查,该函数应返回一个值,指示在数组中未找到该卡,但每当卡的名称拼写错误时,程序输出“分段错误”并退出 #include <cs50.h> #include <string.h> #include <stdio.h> #define COUNTOF(x) (sizeof(x) / sizeof( (x)[0])) int search_1(string

我正在制作一个程序,搜索一张卡的名称,并根据卡在数组中的位置输出卡的价格。程序发现该卡很好,但问题在于拼写检查,该函数应返回一个值,指示在数组中未找到该卡,但每当卡的名称拼写错误时,程序输出“分段错误”并退出

#include <cs50.h>
#include <string.h>
#include <stdio.h>

#define COUNTOF(x) (sizeof(x) / sizeof( (x)[0]))

int search_1(string card);
string cards_1[5] = {"card1", "card2", "card3", "card4", "card5"};

int main(void){
    string card1 = get_string("Card Purchased: ");

    if(search_1(card1) == -1){
        printf("CARD NOT FOUND\n");
    }

    else{
        printf("CARD FOUND\n");
    }
}

int search_1(string card){
    int x = 0;

    while(x < COUNTOF(cards_1)){
        int cardcmp = strcmp(cards_1[x], card);

        if(cardcmp == 0){
            return x;
        }
        x++;
    }
    return -1;
}
#包括
#包括
#包括
#定义计数(x)(sizeof(x)/sizeof((x)[0]))
int search_1(字符串卡);
字符串卡_1[5]={“card1”、“card2”、“card3”、“card4”、“card5”};
内部主(空){
string card1=获取字符串(“购买的卡:”);
如果(搜索1(卡片1)=-1){
printf(“找不到卡”);
}
否则{
printf(“找到的卡”);
}
}
整数搜索_1(字符串卡){
int x=0;
while(x
else if(search_1(card1)!=-1)
不是崩溃的原因,但这应该只是
else
。如前所述,它是冗余的,并且第二次运行
search\u 1
。对于
x==5..19
,您将向
strcmp
中输入一个
NULL
指针,这不是您应该做的。Fir索引20..79或类似的,你将通过你在内存中发现的任何你甚至不应该读的东西。@AdamYounes CS50正在教授关于字符串的可怕技术;如果你放弃他们愚蠢的“字符串”类型,总是直接考虑指针,我会成为一个更好的C程序员。关于sizeof问题,一个常见的宏是:
#define COUNTOF(x)(sizeof(x)/sizeof((x)[0]))
,它给出的是事物中的项数,而不是字节数。@SteveFriedl值得一提的是,该宏有局限性。它适用于数组,但不适用于指针。当一个数组被传递到一个函数中时,它会衰减到一个指针。@AdamYounes-不,这完全是关于你对C语言的理解。
sizeof
是C语言的一部分,它的计算结果是一个事物中的字节数,但你用它来表示有多少项。你关心的数字是5-这是有多少项目,但你只是使用了错误的机制。
COUNTOF
宏将字节总数(我们称之为5*4=20)除以其中一项的大小,得到的是项目数,而不是字节数。这值得仔细研究。
否则如果(搜索1(card1)!=-1)
不是崩溃的原因,但这应该只是
否则
。如前所述,它是冗余的,并且第二次运行
search\u 1
。对于
x==5..19
,您将向
strcmp
中输入一个
NULL
指针,这不是您应该做的。Fir索引20..79或类似的,你将通过你在内存中发现的任何你甚至不应该读的东西。@AdamYounes CS50正在教授关于字符串的可怕技术;如果你放弃他们愚蠢的“字符串”类型,总是直接考虑指针,我会成为一个更好的C程序员。关于sizeof问题,一个常见的宏是:
#define COUNTOF(x)(sizeof(x)/sizeof((x)[0]))
,它给出的是事物中的项数,而不是字节数。@SteveFriedl值得一提的是,该宏有局限性。它适用于数组,但不适用于指针。当一个数组被传递到一个函数中时,它会衰减到一个指针。@AdamYounes-不,这完全是关于你对C语言的理解。
sizeof
是C语言的一部分,它的计算结果是一个事物中的字节数,但你用它来表示有多少项。你关心的数字是5-这是有多少项目,但你只是使用了错误的机制。
COUNTOF
宏将字节总数(我们称之为5*4=20)除以其中一项的大小,得到的是项目数,而不是字节数。这是值得仔细研究的。