в моем коде второй printf не печатает никакого значения - PullRequest
0 голосов
/ 13 февраля 2019

Мой код скомпилирован нормально, но вторая printf моего кода не печатает.

#include<stdio.h>

int main()
{
    char * const p="pointerconstant";

    printf("%s",p);

    *p='B';

    printf("\n%s",p);
}

Когда я запускаю следующую программу, она выводит ..

pointerconstant
pointerconstant

Но это должно быть ..

pointerconstant
Bointerconstant

В чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

я думаю, что ваша проблема похожа: https://stackoverflow.com/a/7547849/5809736

От @bdonlan для вашего кода: Обратите внимание, что если бы вы сделали это, это сработало бы:

    char p[] = "pointerconstant";
    printf("first=%s",p);
    *p='B';
    printf("\nsecond=%s",p);

Это потому, что мыИнициализируем неконстантный массив символов.Хотя синтаксис выглядит одинаково, компилятор обрабатывает его по-разному.

0 голосов
/ 13 февраля 2019

В этой строке

*p='B';

Вы пытаетесь изменить первый байт массива символов, на который указывает указатель.Это не работает, потому что это доступная только для чтения часть двоичного файла вашей программы.Исправьте это, скопировав его в стек или кучу:

#include<stdio.h>
#include<string.h>

int main()
{
    char * const p = strdup("pointerconstant"); // string is copied to the heap
    printf("first=%s", p);
    *p = 'B';
    printf("\nsecond=%s", p);
    free(p); // copy of the string on the heap is released again
    return 0; // 0 indicates that the program executed without errors
}

Результат:

first = указатель-константа

second = Bointerconstant

Кстати, по моему мнению, было бы более идиоматичным написать *p = 'B'; как p[0] = 'B';, но это, конечно, зависит от вас.


Примечание: этот ответв C вопрос также помечен как C ++

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