О длине строки, заканчивая NUL и т. Д.
В настоящее время я изучаю C и яЯ путаю с различиями между массивом символов и строкой, а также с тем, как они работают.
Вопрос 1:
Почему существует разница в результатах исходного кода 1 и исходного кода 2?
Исходный код 1:
#include
#include
int main(void)
{
char c[2]="Hi";
printf("%d\n", strlen(c)); //returns 3 (not 2!?)
return 0;
}
Исходный код 2:
#include
#include
int main(void)
{
char c[3]="Hi";
printf("%d\n", strlen(c)); //returns 2 (not 3!?)
return 0;
}
Вопрос 2:
Чем строковая переменная отличается от массива char? Как объявить их с минимально необходимыми индексными номерами, позволяющими хранить \ 0, если таковые имеются (пожалуйста, прочитайте коды ниже)?
char name[index] = "Mick"; //should index be 4 or 5?
char name[index] = {'M', 'i', 'c', 'k'}; //should index be 4 or 5?
#define name "Mick" //what is the size? Is there a \0?
Вопрос 3:
Соответствует ли ТОЛЬКО завершающий NUL строкам, а не массивам символов? Таким образом, фактическое значение строки "Привет" is [H] [i] [\ 0] и фактическое значение массива char "Привет" такое [H] [i]?
Вопрос 4:
Предположим, c [2] собирается хранить "Привет" с последующим \ 0 (не уверен, как это сделать, используяgets(c)
может быть?). Так где же хранится \ 0? Это хранитсягде-то" после того, как c [2] станет [H] [i] \ 0, или к c [2] добавится a \ 0, чтобы стать c [3], то есть [H] [i] [\ 0]?
Весьма странно, что иногда после массива string / char стоит \ 0, что вызывает проблемы, когда я сравниваю две переменныеif (c1==c2)
поскольку это наиболее вероятно возвращает ЛОЖЬ (0).
Подробные ответы приветствуются. Но краткий ответ поможет моему пониманию :) Заранее спасибо!