C Статические переменные на входах функций - PullRequest
1 голос
/ 16 октября 2019

Я хотел бы сохранить входные данные для функции и манипулировать ею при нескольких вызовах. Однако, если я сделаю следующее ...

int testFunc(char *toString) {
        static char *toChange = toString;
        static int counter = 0;

        toChange[counter] = 'A';
        printf("String is being corrupted... %s\n", toChange);
        counter++;

        return 0;
}

, я получу сообщение об ошибке, говорящее о том, что вход toChange не может быть установлен в нестатическую переменную. Я пытался выяснить, как обойти это, но я не могу найти никаких ответов.

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Статические переменные должны быть инициализированы константными выражениями.

Вместо этого напишите что-то вроде

 int testFunc(char *toString) {
    static char *toChange;
    static int counter;

    if ( toChange == NULL || toString == NULL ) 
    {
        toChange = toString;
        counter = 0;
    } 

    toChange[counter] = 'A';
    printf("String is being corrupted... %s\n", toChange);
    counter++;

    return 0;

}

0 голосов
/ 17 октября 2019

Сделайте это:

int testFunc(char *toString) {
    static char *toChange = NULL;
    static int counter = 0;
    if (toChange == NULL) {
        toChange = (char*)malloc(strlen(toString) + 1);
        memset(toChange, 0, strlen(toString) + 1);
        strcpy(toChange, toString);
    }
    toChange[counter] = 'A';
    printf("String is being corrupted... %s\n", toChange);
    counter++;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...