C中的返回值

dar*_*sky 2 c return function return-value

我写的二进制搜索中的返回值有问题.

我有以下内容:

int binarySearch(char*instructions [],int low,int high,char*string);

int main() {
    char *instructions[];  // some array of strings - it does not include the string "jk"
    char *string = "jk";
    int high = inst_len;
    int x = binarySearch(instructions, 0, high, string);
    if (x == -1)
        printf("not found");
    else if (x == -2)
    printf("error");
    else
    printf("Found at %d", x);
}

int binarySearch(char *instructions[], int low, int high, char *string) {

    int mid = low + (high - low) / 2;

    // Not found
    if (high <= low)
        return -1;

    // If instructions[mid] is less than string
    else if (strcmp(instructions[mid], string) > 0)
        binarySearch(instructions, low, mid-1, string);

    // If instructions[mid] is larger than string
    else if (strcmp(instructions[mid], string) < 0)
        binarySearch(instructions, mid+1, high, string);

    // Return position
    else
        return mid;
}
Run Code Online (Sandbox Code Playgroud)

无论如何,在main二进制搜索总是返回0.然而,当我将打印语句放在二进制搜索算法中时,我得到了-1返回.为什么会这样?这很奇怪!

asv*_*kau 5

你要这个:

// If instructions[mid] is less than string
else if (strcmp(instructions[mid], string) > 0)
    return binarySearch(instructions, low, mid-1, string);

// If instructions[mid] is larger than string
else if (strcmp(instructions[mid], string) < 0)
    return binarySearch(instructions, mid+1, high, string);
Run Code Online (Sandbox Code Playgroud)

注意" return"部分.

你也比你需要做更多次的比较; 你可以存储结果,strcmp这样你只做一次:

int r = strcmp(instructions[mid], string);

if (r > 0)
    return binarySearch(instructions, low, mid-1, string);
else if (r < 0)
    return binarySearch(instructions, mid+1, high, string);
Run Code Online (Sandbox Code Playgroud)

  • 暂且不说:如果在编译器中启用了警告,则应该告诉您该函数并不总是返回值.如果您没有启用警告,请将它们打开! (3认同)
  • @Nayefc - 如果您缺少`return`语句并且使用返回值,则行为未定义.通常,您获得的返回值将是垃圾,例如.在许多x86环境中,它只会发生在寄存器`eax`中. (2认同)