Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Запись строки в двумерный массив

Дмитрий Крайзер Ученик (180), закрыт 4 года назад
Вкратце, мне нужно записать несколько строк в один массив, вот я и взял двумерный массив, т. к массив указателей не подойдет.

#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) никаких предупреждений не вылетает. В чем дело?
Лучший ответ
Дед Мазай Гений (58109) 4 года назад
Компилятор (или IDE) считает, что тут несоответствие типов.
Зачем усложнять? Пиши так:
str[i]
Просто и понятно.
Дмитрий КрайзерУченик (180) 4 года назад
Ну значит нужно так писать &str[i], просто не могу понять почему компилятор так считает. На стеке мне написали что это правило языка и нужно просто запомнить
Дед Мазай Гений (58109) Тут есть некоторое логическое противоречие: (str + i) и *(str + i) работают одинаково. В моей IDE (Visual Studio) можно написать так: auto x = str + i; подвести курсор мыши к "x", IDE покажет тип переменной. scanf("%s", …) ожидает аргумент типа char*, (str + i) имеет другой тип: указатель на массив char[100].
Остальные ответы
Григорий Каринов Мастер (2396) 4 года назад
Вот так работает. Используй функцию strcpy.
Дмитрий КрайзерУченик (180) 4 года назад
так можно же сразу в массив записать, зачем создавать еще один?
Дед МазайГений (58109) 4 года назад
Без strcpy тоже замечательно работает. Зачем лишнее копирование?
Григорий Каринов Мастер (2396) ну хотя да и без этого тоже работает
Похожие вопросы