2016-07-02 7 views
0

Я нуб в C программирования (я из земли JS и PHP), и в качестве учебного упражнения я пытался написать программу, которая запрашивает имя пользователя, а затем распечатывает его с небольшим исключением, если изменить первую букву на z. Однако, когда я пошел, чтобы скомпилировать код он возвратил следующую error сообщения со ссылкой на линию name[0] = "Z";Не может редактировать массив C индексом

предупреждение: назначение делает целое число от указателя без приведения

Есть причина, я могу» t присваивает значение определенному индексу в chararray?

(Примечание: Я попытался типажи "Z" к полукоксу, но он просто бросил error

предупреждения: бросок от указателя на целое число различных size`)

+1

Одинарные кавычки не двойные кавычки –

ответ

5

В отличии от некоторых языков, которые делают не различать строки и символы, C требует другого синтаксиса для символов (по сравнению с односимвольной строкой).

Вы должны использовать одиночные кавычки:

name[0] = 'Z'; 

ошибка довольно загадочная, хотя. Он пытается сказать, что "Z", односимвольная строка C, присваивается name[0], интегральному типу char. Строки C представляют собой массивы; массивы конвертируются в указатели. Следовательно, C рассматривает это как назначение указателя на int без приведения.

+0

Спасибо очень много. У JS и PHP нет ничего подобного, поэтому я понятия не имел. –

4

заменить name[0] = "Z"; на name[0] = 'Z';.

«single-quatation» предназначен для символа element, а «double quatation» - для назначения строк.

2

В C одинарные кавычки и двойные кавычки имеют разные значения. На самом деле в C. нет понятия «Строки». У вас есть базовый тип данных char, где char представлен одиночными кавычками. Чтобы представлять строки, вы храните их как массив символов. Например,

char text[] = {'h', 'e', 'l', 'l', 'o'}; 

Это просто более утомительно способ написания

char text[] = "hello"; 

Это точно так же, как и в первом примере, за исключением того, что есть нулевой символ \0 в конце (это то, как C обнаруживает конец «строк»). Это то же самое, что сказать char text[] = {'h', 'e', 'l', 'l', 'o', '\0'};, за исключением того, что теперь вы можете работать с вашим массивом более легко, если хотите сделать на нем строчную обработку.


Coming на ваш вопрос, если вы хотите индексировать определенный символ в «строка», вы должны были бы получить доступ к нему по его индексу в массиве.

Таким образом, text[0] возвращает символ h, который имеет тип char. Чтобы присвоить другое значение, вы должны назначить один цитируемый символ, как так:

text[0] = 'Z';