функция в функции с двойной ссылкой - PullRequest
0 голосов
/ 28 октября 2018

Я пытаюсь преобразовать строчные буквы в верхние, передав массив символов в качестве аргумента.Я написал метод 'toUpper' внутри метода 'htoi', как вы можете видеть в коде, и я прибег к использованию аргумента двойной ссылки для метода 'toUpper', и он дает мне ошибки при доступе к данным в массиве.Когда я объявляю метод toUppper с единственным ссылочным аргументом в основном, он работает нормально.Мне не нужны решения, но я просто хочу знать, почему это не работает .. пожалуйста, помогите ....

#include <stdio.h>

void toUpper(char **s);

int htoi(char s[]) {
    int i, n;
    n = 0;

    toUpper(s);//<--error here

    for (i = 0; (s[i] >= '0' && s[i] <= '9') ||(s[i] >= 'A' && s[i] <= 'F'); ++i) {
        n = 16 * n + determine(s, i);//converting
    }
    return n;
}

void toUpper(char** s) {
    for (int i = 0; **(s + i) != '\0' ; ++i) {//traverse until null value
        if (**(s + i) >= 'a' && **(s + i) <= 'f') {
            **(s + i) = **(s + i) - ('a' - 'A');//convert character to upper case if true
        }
    }
}

int determine(char hexNum[], int i) {

    int a;

    if (*(hexNum+i) >= 'A') {
        a = (*(hexNum+i) - 'A' + 10);
        return a;
    }
    else if(*(hexNum + i) <= '9'){
        a = (*(hexNum + i) - '0');
        return a;
    }
}

main() {
    int a;
    int i = 0;
    char s[] = "ba";


    a = htoi(s);
    printf("%d", a);

}

1 Ответ

0 голосов
/ 28 октября 2018
  1. В htoi тип s равен char*, но аргумент toUpper равен char**, вы должны использовать как toUpper(&s);
  2. Перед использованием determine, вам нужно объявить или определить его.
  3. determine нужно добавить return

Следующий код может работать.

#include <stdio.h>

void toUpper(char *s);
int determine(char hexNum[], int i);

int htoi(char s[]) {
    int i, n;
    n = 0;

    toUpper(s);//<--error here

    for (i = 0; (s[i] >= '0' && s[i] <= '9') ||(s[i] >= 'A' && s[i] <= 'F'); ++i) {
        n = 16 * n + determine(s, i);//converting
    }
    return n;
}

void toUpper(char* s) {
    for (int i = 0; s[i] != '\0'; ++i) {//traverse until null value
        if (s[i] >= 'a' && s[i] <= 'f') {
            s[i] = s[i] - ('a' - 'A');//convert character to upper case if true
        }
    }
}

int determine(char hexNum[], int i) {

    int a;

    if (*(hexNum+i) >= 'A') {
        a = (*(hexNum+i) - 'A' + 10);
        return a;
    }
    else if(*(hexNum + i) <= '9'){
        a = (*(hexNum + i) - '0');
        return a;
    }
    return 0;
}

int main() {
    int a;
    char s[] = "ba";

    a = htoi(s);
    printf("%d", a);
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...