2016-02-12 5 views
-3

Я хочу напечатать строку в массиве.Как я могу исправить это

#include "stdio.h" 

    int main(){ 
     char str[201]; 
     /*scanf("%[^\n]", str);*/ 
     printf("%s\n", str); 
     const char* A[26] = {"A", "B", "X", "P", "Q", "R", "M", "N", "C", "E", "D", "K", "L", "J", "O", "S", "H", "T", "U", "F", "V", "Z", "G", "W", "I"}; 
     printf("%s\n", A[5]); 
    } 

но выход

enter image description here

+6

Почему вы прокомментировали 'scanf' и, таким образом, распечатали, используя буфер, содержащий мусор? – kaylum

+2

Каков ожидаемый результат? –

+3

'printf ("% s \ n ", str);' это печать значения мусора и 'printf ("% s \ n ", A [5]);' печатает 'R' в конце (следующая строка) , как показано на выходном изображении. – Himanshu

ответ

1

Значение мусора печатается из-за не-initiallized str.

Используйте прокомментированную строку scanf и она будет работать нормально.

или если вы не хотите использовать эту линию, я хотел бы предложить вам initiallize ваш str, как вы делали для A

0

Ну это довольно простой.

Печатаемое значение - это мусор, так как всякий раз, когда вы печатаете неинициализированную строку на большинстве языков, вывод представляет собой мусор, потому что, когда вы объявляете строку с разрешением 10 символов, в стеке всего 10 байт. , В нем не задано никакой конкретной ценности.

Ну, похоже, что результат, который вы получаете, зашифрован. (спасибо комментарию Альтера Манна).

Но, когда вы читаете строку с использованием fgets, scanf или любой другой функции, не имеет значения, если она не инициализирована или нет. Любое значение вводится пользователем, оно сохраняется в строке. Таким образом, не комментируя ваш scanf, вы получите идеальный выход. Если вы прокомментировали scanf, потому что вы не хотите использовать его, просто инициализировать его любит:

char str[201] = {"a", "b"}; 

и положить все, что вы хотите.

Кроме того, я не уверен, что это хороший способ, так что проверить это: Proper way to initialize a string in C

В основном, если вы не хотите, чтобы прочитать полный ответ, вывод совершенно правильно, так как у вас есть не инициализируется строка, а полученный вами R хранится в A[5], который вы печатаете.