слово является указателем на массив символов, который будет указывать на ваш первый вход «Мой» на первой итерации. Это означает, что:
word = "My";
input[0] = word;
input[0] = "My"; //as word and input[0] now point to the same memory location
Вы затем изменить значение, сохраненное в ячейку памяти, на которую указывает слово:
input[0] = word;
word = "name";
input[1] = word;
слово, как указатель не изменился, только значение, которое указывает изменилось. На вашей второй итерации:
input[0] = word = "name"; //as the memory location of word doesn't change
input[1] = word = "name"; //any pointer set to word will point to the same char array
Ваша третья итерация делает одно и то же, в результате чего ваш выход будет «есть есть есть».
Во-первых, вы должны определить слово с его собственным размером/память:
char word[64] = NULL; //arbitrary size that's bigger than your largest length word
В этом примере вы можете использовать:
char input[5][64] = { NULL };
Но я бы предложил использовать динамически выделенной памяти для ввода позже ,
И это до вас, как вы скопировать содержимое слова в свой входной массив, но возможности включают в себя с помощью STRCPY:
int i = 0;
while (scanf("%s", word) != EOF){
strcpy(input[i], (const char*)word);
i++;
}
Или, может быть, что это лучший способ, чтобы закодировать программу, которая читает серию слова из stdin и хранит его в массиве? –
Это тест? Потому что [вопрос с точно таким же кодом] (http://stackoverflow.com/questions/35218216/can-anyone-please-explain-how-the-following-loop-executes) просто удален. – juanchopanza
нет, его куча вопросов практики –