Здесь есть ряд проблем.
Сначала строка:
short int *number = 0;
должно быть:
short int number = 0;
Поскольку вы использовали первый, он дал вам нулевой указатель на short
. Это не , что вы хотите, так как первая разыменование этого зверя, вероятно, приведет к падению вашего кода (или, что еще хуже, не сбой вашего кода, но вызовет странное поведение).
Во-вторых, вам не нужно передавать адрес строки, они автоматически распадаются на адрес, поэтому измените:
getData (&number, &string);
echoPair (&number, &string);
до:
getData (&number, string);
echoPair (&number, string); // but see last point below.
И, наконец, вам не нужно передавать адрес , просто чтобы напечатать его, вы можете просто передать значение, отсюда:
echoPair (&number, &string);
становится:
echoPair (number, string);
В целом, я думаю, что вы хотите:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void getData(short int *number, char *string) {
printf("\nPlease enter a number greater than zero: ");
scanf("%hd", number);
printf("Please enter a character string: ");
scanf("%s", string);
}
void echoPair(short int number, char *string) {
printf("Number: %hd Character(s): %s\n", number, string);
}
int main (void) {
short int number = 0;
char string[32] = {0};
printf("Blah blah ...");
getData(&number, string);
echoPair(number, string);
return(0);
}
Кроме того, вы не никогда не хотите видеть неограниченные сканы строк, такие как:
scanf ("%s", string);
в готовом к использованию коде. Это уязвимость переполнения буфера, ожидающая своего появления, так как вы не контролируете, что будет вводить пользователь. В вашем конкретном случае, если пользователь вводит более (около) 30 символов, это может вызвать все виды странного поведения.
Функция scanf
предназначена для сканирования отформатированного текста, и не намного больше неотформатированных , чем пользовательский ввод: -)
Если вам нужна надежная функция пользовательского ввода, см. здесь .