Довольно простой вопрос C. Почему следующие две команды приводят к созданию строк, имеющих разные размеры?Основы C: сравнение «* char» и «char [x]» для создания строки
Как вы можете видеть ниже, метод 1 создает строку размером 8 байт, а метод 2 создает строку размером 5 байт.
Am запутался, почему метод 1 создает строку размером 8 байт ...
(я уже видел эти сообщения:. Difference of sizeof between char* x and char x[] и What is the difference between char s[] and char *s? Если у меня не было чтение-понимание обанкротиться, его на самом деле не решить, почему метод 1 создает строку размером 8 байт ... Согласно ответам, это, казалось бы, что метод 1 должен быть создание указателя размером 4 байта)
метод 1:.
char *string = "ABCD";
Способ 2:
char string2[5] = "ABCD";
Например, когда я запускаю следующую программу, я получаю вывод, показанный ниже.
#include <stdio.h>
int main(int argc, char *argv[])
{
char *string = "ABCD";
printf("Based on \"char *string = \"ABCD\":\n");
printf("Size of string: %ld\n",sizeof(string));
printf("Size of each element of string: %ld\n",sizeof(string[0]));
printf("String: %s\n\n", string);
char string2[5] = "ABCD\0";
printf("Based on \"char string2[5] = \"ABCD\":\n");
printf("Size of string: %ld\n",sizeof(string2));
printf("Size of each element of string: %ld\n",sizeof(string2[0]));
printf("String: %s\n\n", string2);
return 0;
}
Выход вышеуказанной программы:
Возможный дубликат [В чем разница между char s \ [\] и char \ * s в C?] (http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-c) –
еще один возможный обман: http://stackoverflow.com/questions/15538210/sizeof-a-pointer –
Кроме того, для 'char string3 [] =" ABCDE ";' (не объявлен размер) 'sizeof (string3) == 6' (5 букв + нуль) –