Что произойдет, если указатель увеличится после присвоения значения его ячейке памяти? - PullRequest
0 голосов
/ 11 декабря 2019

Рассмотрим следующий пример:

#include <stdio.h>

int main()
{
    char charArr[3] = "c++";
    char *pointer = charArr;
    pointer+=3;
    *pointer = 'q';
    pointer+=1;
    *pointer = 'd';
    printf("%s", charArr);
    return 0;
}

Я надеялся, что получу c ++ qd , но получил c ++ r

Значение q увеличивается на 1 и превращается в 'r', я пробовал с другими приращениями, и оно отражается согласно ASCII.

Ответы [ 2 ]

1 голос
/ 11 декабря 2019

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

Это означает, что вы пишете после конца массива. Это вызывает неопределенное поведение , которое в этом случае проявляется как неожиданный вывод.

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

char charArr[6] = "c++";
char *pointer = charArr;
pointer+=3;
*pointer = 'q';
pointer+=1;
*pointer = 'd';
pointer+=1;
*pointer = 0;
0 голосов
/ 11 декабря 2019

Указатели просто указывают на местоположение, вы вводите данные в меньшем пространстве, поэтому сначала просто увеличивайте длину массива char, а затем обрабатывайте, однако ваши указатели работают хорошо.

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