C Строка печатает ненужные символы - PullRequest
2 голосов
/ 16 февраля 2011
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a[]="shevchenko ac milan";
printf("%s",&a);
}

Это печатные издания "shevchenko ac milan"

but 
#include <stdio.h>
#include <stdlib.h>
int main()
{
    char a[]="shevchenko ac milan";
printf("%s",&a+1);
}

Почему это печатает ненужные символы?

Ответы [ 4 ]

10 голосов
/ 16 февраля 2011

&a имеет тип указатель на char[20].

Когда вы выполните &a+1, вы перейдете к следующему char[20] элементу в памяти, таким образом выпосле a.

Вместо этого у вас должен быть char*: суммируя с ним 1, вы переходите к следующему char.

Чтобы получить char* вы можете просто использовать a (при этом он затухает в char*) и, таким образом, a+1, чтобы перейти к следующему символу.

3 голосов
/ 16 февраля 2011

Вам не нужно передавать адрес (&a) - в C строка - это массив char s, поэтому a уже является адресом.Попробуйте:

char a[]="shevchenko ac milan"; printf("%s", a);

и

char a[]="shevchenko ac milan"; printf("%s", a+1); 
1 голос
/ 16 февраля 2011

Это происходит потому, что когда вы говорите & a + 1.. Это заставит указатель достичь одного места перед концом строки. Это основная операция указателей . Вы можете проверить это для целочисленного массиватакже.

Например,

int a[]={1,2,3,4,5};

printf("%d",&a+1); всегда будет выводить значение мусора.

То есть теперь это будет собирается указать на следующий 1D массив , которого на самом деле нет. Таким образом, выводится значение мусора.

0 голосов
/ 16 февраля 2011

Когда вы увеличиваете «адрес, который указывает на адрес», вы получаете неназначенное значение.fbrereto верно, вам нужно только передать a для указателя на первую позицию и a + 1 для указания на вторую позицию в массиве.

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