scanf_s возвращает Null каждый раз

Я использую scanf_s для двух разных входов и помещаю их в массивы символов. Я прикрепил код и вывод, который он дает

char firstName[30];
char lastName[30];


int main() {

// Input Name
printf("Please input your name: ");
scanf_s("%s %s", firstName, 30, lastName, 30);

printf("%s %s", firstName[30], lastName[30]);
_getch();

return 0;
}

вывод:

Please input your name: Jane Smith
(null) (null)

любая помощь в решении этой проблемы была бы здоровой, потому что любые scanf_s, которые я делаю, не будут работать, и это сводит меня с ума.


person Lachlan Dawson    schedule 09.05.2017    source источник
comment
Ваш вызов printf() неверен: вместо самих буферов вы передаете ему значения символов за пределами буфера, которые могут быть чем угодно. Вам (не)повезло, что они равны нулю.   -  person Medinoc    schedule 09.05.2017
comment
Деталь: 30 это int. Чтобы соответствовать Std C, Lib K., аргумент размера должен быть size_t --> scanf_s("%s %s", sizeof firstName, sizeof firstName, lastName, sizeof lastName); В коде есть и другие проблемы.   -  person chux - Reinstate Monica    schedule 09.05.2017
comment
Рассмотрите возможность принятия ответа, если ваша проблема решена.   -  person Marievi    schedule 18.05.2017


Ответы (1)


Ваш scanf_s вызов в порядке. Что вам нужно изменить, так это строку:

printf("%s %s", firstName[30], lastName[30]);

Используя printf таким образом, вы пытаетесь напечатать элемент в позиции 30 массивов firstName и lastName, который не только просит напечатать определенную позицию вместо всего массива, но и выходит за границы ваших массивов. Это вызывает неопределенное поведение.

Замените его на:

printf("%s %s", firstName, lastName);
person Marievi    schedule 09.05.2017