[C] Строка и массив около% s,% c - PullRequest
0 голосов
/ 12 декабря 2018

Почему я должен использовать% c здесь вместо% s? Если я использую% s, произойдет ошибка

printf("%c",Array[i]);

, когда я определю char Array[STRSIZE]="apple"; should use %s here

, как правильно использовать% s и% c?

Код:

#include<stdio.h>
#include<string.h>
   int main(){
      #define STRSIZE 81

         char Array[STRSIZE];
         printf("Enter a string: ");
         gets(Array);
         printf("\nYou entered: ");
         int i ;
    for(i=0;i<strlen(Array);i++){

         printf("%c",Array[i]);
    }
   return 0 ;} 

Результат:

Enter a string: apple
You entered: apple

Ответы [ 3 ]

0 голосов
/ 12 декабря 2018

Вы используете "%c" правильно, но не используйте gets, больше не является частью стандарта

Вы можете использовать fgets:

char arr[STRSIZE] = {0};
char *ptr;

printf("Enter a string: ");
if (fgets(arr, sizeof arr, stdin) {
    // skip the trailing new line
    ptr = strchr(arr, '\n');
    if (ptr != NULL) {
        *ptr = '\0';
    }
}

чтобы напечатать строку, просто используйте:

printf("%s\n", arr);
0 голосов
/ 12 декабря 2018

способ обработки второго аргумента, переданного в printf, зависит от типа, указанного в %c или %s.
%c - указывает тип символа, поэтому функция будет считывать данные из памятиместоположение, указанное массивом [i], будет иметь размер char.
, где, когда вы передаете %s, тип данных берется как массив char, поэтому функция будет считывать байты, пока не получит \0 из памятиадрес передается в качестве второго аргумента.
Поскольку вы передаете переменную типа char в %s, это может привести к ошибке времени выполнения, так как имеется несоответствие типов.

0 голосов
/ 12 декабря 2018

%c печатает char.%s печатает строку, поэтому она ожидает указатель на char.

char Array[STRSIZE];

Здесь Array - это массив char, поэтому выражение Array передается функциираспадается на указатель на char.Таким образом, его можно использовать для %s (при условии, что строка действительна).

Array[i], однако, не является строкой.Это char, и как таковой он может быть передан для %c, но не для %s.Возможны следующие варианты:

  • вывести строку с помощью printf("%s",Array);
  • вывести один символ этой строки с помощью printf("%c",Array[i]);.Перебирая строку, вы можете напечатать всю строку следующим образом:
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...