2015-12-14 3 views
-1

Вот только пример кода:Как увеличить символы в константе?

#include <stdio.h> 
char a; 
int main(void) 
{ 
a = 'ayy lmao'; 
printf("%c", a); 
getchar(); 
return 0; 
} 

Когда я исполняю, я получаю сообщение об ошибке сказав, что есть «слишком много символов в постоянной». Как я могу исправить это и разрешить назначать столько символов «a»?

+13

«w» - это массив символов, состоящий из «w» и нулевого символа «\ 0». Попробуйте 'a = 'w';' –

+5

Включите предупреждения компилятора и обратите внимание на них – Olaf

+0

@AnirudhRamanathan О, вот и все. Благодарю. –

ответ

1

"w" - это массив символов, и он преобразуется в указатель на первый элемент массива в качестве операнда операнда оператора присваивания.

Относится к char, поэтому в типичных условиях он станет бессмысленным.

Попробуйте

#include <stdio.h> 
int main(void) { 
    int a; 
    a = 'w'; 
    printf("%c", a); 
    return 0; 
} 

или

#include <stdio.h> 
int main(void) { 
    char* a; 
    a = "w"; 
    printf("%s", a); 
    return 0; 
} 

Примечания:

  • Вы должны использовать стандартный int main(void) вместо main().
  • Глобальные переменные не должны использоваться, если это необходимо.
  • Символьные константы имеют тип int в C и %c для printf() принимают int значения. (char автоматически преобразуется в int для аргументов переменной длины)
  • getchar(); удален. Программное обеспечение терминала полезно для выполнения программы и просмотра результата.
1

В C Вы должны определить символ в одиночной цитате.

a = 'w'; 

Все происходит в пределах " рассматривается как массив символов. Он содержит символ (символы), за которым следует завершающий символ \0.

+0

Но printf не печатает ни одного содержимого строки - он печатает один байт адреса строки. Если бы он сказал 'printf («% c », * a), то он бы увидел то, что хотел. –

+0

Да, но с его первоначальным кодом, хотя он получает пару предупреждений, он должен получить распечатку мусора в качестве вывода. – Fawzan

+0

@JerryJeremiah Нет, он не будет. 'a' имеет тип' char', поэтому он получит ошибку компиляции для разыменования чего-то не указателя. – MikeCAT

Смежные вопросы