Передача символа по ссылке - PullRequest
0 голосов
/ 29 марта 2019

Проблема в том, что я пытаюсь передать предложение по ссылке, чтобы что-то изменить в нем (в данном случае добавление символа), но ничего не изменилось.

Первое, что я попробовал, был этот оригинальный код, но без ввода "*" или "&", и я получил тот же результат. Я читал другие подобные вопросы, которые использовали strcpy (), но я не уверен, как это может относиться к этой проблеме или какое может быть решение, поскольку я не знаком с указателями, используемыми таким образом.

char my_char_func(char *x)
{
    return x+'c';
}
int main()
{
    char (*foo)(char);
    foo = &my_char_func;
    char word[]="print this out";
    puts(word);
    foo(&word);
    puts(word);
    return 0;
}

Я ожидаю, что второй вывод будет "print this out"

1 Ответ

1 голос
/ 29 марта 2019

Вы добавляете символ c к фактическому указателю. Поскольку вы не можете динамически расширять свой массив символов в C, я полагаю, что вам придется выделять новый массив с пробелом для дополнительного символа, удалять передаваемый указатель, а затем устанавливать его в начале нового массива. , Это должно избежать переполнения памяти.

int main()
{
    char (*foo)(char);
    int i = 0;
    foo = &my_char_func;
    char word[]="print this out";
    for(i = 0; i < size_of(word); ++i)
    {
       word[i] = toupper(word[i]);
    }
    puts(word);
    foo(&word);
    puts(word);
    return 0;
}

If you don't want to use toUpper, you can change you function in either of two ways:

Option 1:

void my_char_func(char *string, int sizeOfString)
{
    int i = 0;
    for(i = 0; i < sizeOfString; ++i)
    {
        //Insert logic here for checking if character needs capitalization
        string[i] = string[i] + ' ';
    }
}

Option 2:
Do the same as with toUpper, simply calling your own function instead.
...