В C, есть два связанных текстовых типов данных: char
и строки. Строка - это указатель на массив символов, который по соглашению заканчивается символом NUL ('\ 0'). A char
- это один байт, представляющий символ ASCII.
Вы создаете строковые литерал путем составления последовательности символов, содержащихся между открытием и закрытием двойных кавычек: "this is a string literal"
С другой стороны, вы создаете char
буквального путем составления одного символьное выражения - возможно, с обратная косая черта - между двумя одинарными кавычками: 't', 'h', 'e', 's', 'e', '', 'a', 'r', 'e', '', 'c', 'h', 'a', 'r', '', 'l', 'i', 't', 'e', 'r', 'a', 'l', 's' , '\ n'
После появления кодовых страниц и многобайтовых символов encodin gs, C добавлена поддержка для «широких символов» (то есть более 8 бит, используемых для хранения одного элемента) и для «многобайтовых символов» (то есть кодировки символов, которые использовали 8-битные значения, но требуется несколько кодов для кодирования одного символа).
Компилятор видит свою линию инициализации массива:
char a[]={'a','5ab','na','8s'};
И при условии, что «5AB» и «на» и «» 8s являются попыткой, вами, чтобы указать ширину или мульти- байтовый символ буква. Он знает, что символы (не строки) заключены в одинарные кавычки.Это знает что вы используете тип char
. Таким образом, это не могут быть строки. Но они не являются многобайтовыми символами.
В действительности, я думаю, вы предназначались для того, чтобы они были струнами. Вероятно, вы исходите из python или bash, perl или другого языка, где одиночные кавычки могут разграничить строки. Но это не C.
Чтобы создать список строк, вам необходимо знать, что строки имеют тип char *
(или const char *
). Затем вы хотите создать массив из них - это ваш список:
const char *list_of_str[] = {
"hello",
"my name",
"is George"
};
Вы заметите, что argv
список строк. ;-)
Hm. Слишком много проблем ... Не знаю, с чего начать. Хорошо, литералы первого строчки написаны с двойными кавычками. –
Вы не можете использовать символ таким образом, и вы не можете проверить равенство строк таким образом. Вы действительно создаете 'char * a []', и вам нужно посмотреть справочную страницу для 'strcmp' –
. Две основные проблемы - непонимание того, как строки работают на C, и что' n' никогда не устанавливается ни на что , Последнее легко исправить, вам нужен еще один цикл 'for', но первые строки в C дьявольски сложны. Я предлагаю вам работать с помощью учебника, например [Learn C The Hard Way] (http://c.learncodethehardway.org/book/). – Schwern