Невозможно напечатать строку - PullRequest
0 голосов
/ 07 марта 2019

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

while (*str != '\0')
{
    if (*str == ' ') 
    *str = '-'; 
    str++;
 }
 print(str);

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Когда вы используете указатели для этого и увеличиваете указатели, тогда print(str) покажет вам конец строки, поэтому \0.

Вы должны сохранить указатель для начала строки:

    char* str = (char*) malloc(sizeof(char) * 255);
    memcpy(str, "abc de", 255);
    char* beginStr = str;

    while(*str!='\0') {
        if (*str == ' ') {
            *str = '-';
        }
        str++;
    }

    printf("%s\n", beginStr);
    free(beginStr);
0 голосов
/ 07 марта 2019

Указатели - это специальный тип переменных, используемый для хранения адресов других переменных. когда вы меняли значение внутри указателя str с помощью «str ++», оно затем указывало на следующий элемент, а после цикла while str указывало на последний элемент строки ('\ 0'). Таким образом, вы должны сохранить адрес первого символа строки, чтобы что-то сделать с ним позже.

int main() {
    char *s = "abcde", *str =s; // s,str stores address of first character

    while(*str!='\0'){
        if(*str ==' ') 
            *str='-';
        printf("%c", *str);
        str= str+1; // str now points to the next character. But s remains unchanged
    }


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