Как мне переопределить, что находится в указателе символов в C - PullRequest
1 голос
/ 07 ноября 2019

У меня следующая проблема:

У меня есть строка в переменной указателя символов, и я хотел бы сместить каждый символ в строке на 1 (например), а затем в конце я хотел бы сохранитьновая строка в исходную переменную.

мой код выглядит следующим образом:

int main(){
    char *string = "Hello";

    while (*string != '\0') {
        putchar(*string + 1);
        string++;
    }

    return 0;
}

Если я использую putchar, он работает как положено, но когда я пытаюсь это сделать:

*string = *string +1; Я получаю ошибку сегментации

Я также попробовал следующие подходы:

*string = &string +1;

*shifted = *string +1;
shifted = *string;

string = *string +1;

ини одна из них не сработала, либо я получил предупреждение, либо произошла ошибка сегментации.

Есть ли способ, которым я мог бы переопределить *string, чтобы в нем были новые сдвинутые буквы, чтобы я мог использовать его позже.

Спасибо за помощь, очень признателен.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2019

Как указано в комментариях, вы не можете изменить string. Вот почему он работает с putchar, но не при попытке его изменить. Вот один из способов сделать то, что вы хотите сделать.

int main(){
    char *string = "Hello";
    char *shifted = malloc(strlen(string));

    for(int i = 0; i < strlen(string); i++) {
        shifted[i] = string[i] + 1;
    }

    printf("%s %s\n", string, shifted);

    free(shifted);
    return 0;
}
0 голосов
/ 07 ноября 2019

Я думаю, что вы пытаетесь сделать это:

#include <stdio.h>

int main(int argc, char* argv[]) {
    char *str;
    char *original;
    str = malloc(sizeof(char) * 6);
    original = str;
    strcpy(str, "Hello");

    while (*str != '\0') {
        *str = *str + 1;
        putchar(*str);
        str++;
    }

    free(original);

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...