0
//в методе getCryptInfo строчка strcaps(msg) вылетает с ошибкой. как передать аргумент getCryptInfo в strcaps
//пишу под vs2019 без компилятора gcc

#include<stdio.h>

void getCryptInfo(char msg[], char key[]);
char* strcaps(char* s);

int main(void) {
    getCryptInfo("zzTzHECRAZYPROGRAMMER1", "HELLO");//zzTzHECRAZYPROGRAMMER1 to uppercase
    getCryptInfo("ATTACKATDAWN", "LEMON");
    getCryptInfo("1", "BAG");

    return 0;
}

char* strcaps(char* s)
{
    while (*s != '\0')
    {
        *s = toupper(*s);
        s++;
    }
    return s;
}

void getCryptInfo(char msg[], char key[]) {
    //char a[] = *msg; doesnt work or void getCryptInfo(*msg ...)
    char a[] = "zz";//works
    strcaps(a);
    //strcaps(msg); doesnt work
    printf("%s", a);
    printf("\n");
}
Lex
  • 63
  • Строковые литералы модифицировать нельзя. Связанный вопрос: C. Таблица строк. – wololo Mar 06 '21 at 13:35
  • спасибо, закрываю вопрос. – Lex Mar 06 '21 at 14:30
  • думаю, что есть решение через *char; – Lex Mar 06 '21 at 14:34
  • Есть, конечно. Инициализируете массивы строковыми литералами char a1[] = "zzTzHECRAZYPROGRAMMER1"; char a2[] = "HELLO";. И уже указатели на первые элементы этих массивов передавайте в функцию getCryptInfo: getCryptInfo(a1, a2);. По ссылкам, что я вам привёл ранее, такой подход рассматривался. Либо внутри getCryptInfo создавайте копию строки и работайте с ней. Либо считывайте символ из строки, изменяйте регистр и сразу выводите, не сохраняя его в исходную строку. – wololo Mar 06 '21 at 15:31
  • еще раз спасибо за ответ, по заданию нужно три раза ввести разные данные. Получается a1 a2 еще два раза переписывают значение. многовато строк, поэтому не рассматривал такой вариант. – Lex Mar 06 '21 at 16:01

0 Answers0