Вкратце, мне нужно записать несколько строк в один массив, вот я и взял двумерный массив, т. к массив указателей не подойдет.
#include #include
int main (void) { int quantily,i; printf ("Введите количество слов: "); scanf("%d",&quantily); char str[quantily][100]; for (i=0;i<quantily;i++) { printf ("Введите %d-ое слово: ",i+1); scanf("%s",(str+i));
}
return 0 ; }
%s на вход же требует адрес, так почему мне компилятор выводит предупреждение когда я пишу (str+i) , а когда пишу *(str+i) никаких предупреждений не вылетает. В чем дело?
Ну значит нужно так писать &str[i], просто не могу понять почему компилятор так считает. На стеке мне написали что это правило языка и нужно просто запомнить
Дед Мазай
Гений
(58109)
Тут есть некоторое логическое противоречие: (str + i) и *(str + i) работают одинаково.
В моей IDE (Visual Studio) можно написать так:
auto x = str + i;
подвести курсор мыши к "x", IDE покажет тип переменной.
scanf("%s", …) ожидает аргумент типа char*, (str + i) имеет другой тип: указатель на массив char[100].
#include
#include
int main (void)
{
int quantily,i;
printf ("Введите количество слов: ");
scanf("%d",&quantily);
char str[quantily][100];
for (i=0;i<quantily;i++)
{
printf ("Введите %d-ое слово: ",i+1);
scanf("%s",(str+i));
}
return 0 ;
}
%s на вход же требует адрес, так почему мне компилятор выводит предупреждение когда я пишу (str+i) , а когда пишу *(str+i) никаких предупреждений не вылетает. В чем дело?