main()
Прототип делает не соответствует стандарту; ему нужен тип возврата int
. Поэтому изменить его на:
int main(void)
или
int main(int argc, char* argv[])
printf("%c is stored at address %u\n",*cptr,cptr);
%u
не является правильным спецификатором для указателя; вам нужно использовать %p
вместо:
printf("%c is stored at address %p\n",*cptr,(void*)cptr);
length=cptr-name;
length
имеет тип int
и, вероятно, ваша машина 64 бит таким образом, переменная не может иметь разницу адресов, который вызывает проблемы, так что лучше с помощью size_t
.
size_t length;
и последний выход изменить адекватный спецификатор:
printf("\n Length of the string = %zd\n",length);
статьи применима получать длину строки, используя только указатели поместить char *cptr=name;
после name="Delhi";
Ваш программа должна быть:
#include <stdio.h>
main()
{
char *name;
size_t length;
name="Delhi";
char *cptr=name;
printf("%s\n",name);
while(*cptr != '\0')
{
printf("%c is stored at address %p\n",*cptr,(void *)cptr);
cptr++;
}
length=cptr-name;
printf("\n Length of the string = %zd\n",length);
return 0;
}
Stackoverflow не завод решения. Это форум вопросов и ответов. Пожалуйста, укажите больше информации, чем просто код, и, пожалуйста, укажите, что вы сделали, чтобы попытаться решить проблему. Кроме того, попробуйте указать информацию о указателях Google, потому что это ваша проблема. – Gab
'int x; int y = x; x = 5; // почему y не содержит 5? ' – immibis
Вы не устанавливаете' cptr' в хорошее значение; вы устанавливаете его в неопределенное значение в 'name', прежде чем вы установите' name' на известное значение. Это не приводит к счастью, но приводит к неясным комментариям других людей, иллюстрирующих, но не объясняющих проблему. Все ли это неправильно, это отдельный вопрос. Ваш код не является C99 или C11, потому что вы не указали тип возврата 'main()'. –