Я всегда интересно, в чем разница между этими двумя в Cуказателя на символ и массив символов в C
char *str;
char str[50];
У меня есть следующий код, используемый для чтения строки из пользовательского ввода вместо использования добирается.
int read_line(char *str, int n);
int main (int *argc, char *argv[])
{
char *str;
read_line(str, 50);
printf("%s", str);
return 0;
}
int read_line(char *str, int n)
{
int ch, i = 0;
while((ch = getchar()) != '\n')
{
if(i < n)
{
*str++ = ch;
i++;
}
}
*str = '\0';
return i;
}
Сборник работает нормально, как ожидалось, но разбился, когда я попытался запустить. И затем я изменяю аргумент функции read_line()
, вместо char *str
Я использую char str[50]
.
Программа работает как ожидалось при использовании char *str[50]
в качестве аргумента.
Может кто-нибудь объяснить, почему это происходит? или в чем основное отличие от pointer to char
и character array
?
возможный дубликат [Какая разница между голец s \ [\] и символ \ * s в C? ] (http://stackoverflow.com/questions/1704407/what-is-the-difference-between-char-s-and-char-s-in-c) – skrrgwasme
Когда вы пишете 'char * str;' у вас есть только указатель, нет массива. Но в случае 'char str [50];' у вас есть указатель char str, и у вас есть массив из 50 символов. В этом случае указатель инициализируется адресом первого элемента массива. – watou
Прочтите раздел 6 [comp.lang.c FAQ] (http://www.c-faq.com/). –