Eoghán O'Chionnáigh Ответов: 1

Почему не работает использование указателя *в printf (), а не массива?


В одном учебнике мне сказали, что я могу использовать указатель *в функции printf here вместо массива, потому что это, по сути, одно и то же.

Однако, когда я запускаю его с помощью указателя*, программа выходит из строя, почему это не работает? Спасибо!

https://s12.postimg.org/uls819rul/C_question.png[^]

Что я уже пробовал:

Я пробовал использовать указатель *в качестве того, что нужно напечатать в функции printf, и он выходит из строя... однако такие работы.

Patrice T

Выкладывайте код, а не картинку !
Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.

1 Ответов

Рейтинг:
0

OriginalGriff

Я просто попробовал его с небольшим улучшением:

#include <stdio.h>

int main()
{
    char array[] = "Eoin Kenny\0";
    char *p = array;
    *p = 'O';
    p++;
    *p = 'w';
    p++;
    *p = 'e';
    p++;
    *p = 'n';
    p++;
    printf("My array is: %s", array);

    return 0;
}
И это работает:
My array is: Owen Kenny
Единственное "реальное" изменение - это добавление Терминатора строки, чтобы printf не сбегал с конца строки.
Может быть, именно отсутствующий нуль заставляет вас думать, что он разбился!
Но то, что я бы сделал, немного проще:
#include <stdio.h>

int main()
{
    char array[] = "Eoin Kenny\0";
    char *p = array;
    *p++ = 'O';
    *p++ = 'w';
    *p++ = 'e';
    *p++ = 'n';
    printf("My array is: %s", array);

    return 0;
}


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


Richard MacCutchan

Компилятор всегда добавляет конечное значение null к строковым константам, теперь у вас есть два значения NULL в конце. Если вы посмотрите на код OP, то последний оператор перед printf является pointer = 'n', тем самым делая указатель недействительным.

OriginalGriff

: дох: я и забыл об этом!
Вот почему лучше копировать и вставлять, чем предоставлять изображения...: вздох: