Можете ли вы напечатать содержимое указателя, указывающего на массив? - PullRequest
0 голосов
/ 18 октября 2018

Я играю с этим кодом на одном из моих слайдов лекций, и один из моих вопросов - при печати массива, почему мы не можем использовать указатель вместо того, чтобы просто печатать «a», в последней строке печатиоператор

printf("\n message after decryption: %s\n", a);    

Я не понимаю, почему мы не можем использовать указатель для распечатки массива.Может кто-нибудь объяснить мне, почему это не может быть сделано?

printf("\n message after decryption: %s\n", *q);  

#include <stdio.h>
#define NUM 78

int main()
{
   int i = 0;
   char a[] = "Hello CSE 240";
   printf("\n message: %s\n ", a);
   while(a[i] != '\0'){a[i] = *(a+i)+1;i++;}
   printf("\n message after encryption: %s\n ", a);
   char *q = a;
   while(*q != '\0'){*q = *q-1;q++;}
   printf("\n message after decryption: %s\n", a);
}

Ответы [ 2 ]

0 голосов
/ 18 октября 2018
 #include <stdio.h>
 #define NUM 78

 int main()
 {
     int i = 0;  
     char a[] = "Hello CSE 240";
     printf("\n message: %s\n ", a);

     while(a[i] != '\0'){a[i] = *(a+i)+1;i++;}
     printf("\n message after encryption: %s\n ", a);

     char *q = a;

     while(*q != '\0'){*q = *q-1;q++;
     //decrypting the value of a 
     }//end of this is pointing to null

     q=a;//repointing to point a     
     printf("\n message after decryption: %c\n", *q);//H is printed
     printf("\n message after decryption: %s\n", q);//Hello CSE 240 is printed 

 }
0 голосов
/ 18 октября 2018

Вы хотите распечатать содержимое массива после цикла модификации q, но после всего приращения, которое он указывает на нулевой символ завершения, т.е. '\0' - следовательно, использование q в printf напечатает этотолько - message after decryption: - измененный массив / строка не будет напечатан.

Чтобы сделать это с q, вам нужно переназначить q на первый элемент массива: q=a после цикла whileзаканчивается.

, и тогда этот оператор будет работать так, как вы хотите:

printf("\n message after decryption: %s\n", q);

Хорошо, что вы изменили оператор печати с подходящим спецификатором формата.

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