嗨,我希望能够对我的结构'数据包'上的'数据'条目输入我的数据进行一些验证。
基本上它只能是50个字符,只有数字输入。
struct packet{ // declare structure for packet creation
int source;
int destination;
int type;
int port;
char data[50];
};
struct packet list[50]; //Array for structure input & initiate structure
printf("\nEnter up to 50 numeric characters of data.\n");
scanf("%s", list[x].data);
所有帮助都很有用,我提前感谢你。
答案 0 :(得分:2)
使用此:
scanf("%49s", list[x].data);
您需要49而不是50,因为将添加空终止符。
获得字符后,使用isdigit()执行有效性检查。
答案 1 :(得分:2)
增加目的地的尺寸,以容纳50 char
和\0
。使用格式"%50[0-9]"
说明符。
struct packet{ // declare structure for packet creation
...
char data[51];
};
// it can only be 50 characters long and only have number inputs
if (scanf("%50[0-9]", list[x].data) != 1) Handle_Unexpected_Input();
if (strlen(list[x].data) < 50)) String_Too_Short();
您可能需要一个前导空格来丢弃前导空格:" %50[0-9]"
答案 2 :(得分:0)
您正在寻找一种避免溢出缓冲区的方法。有很多方法可以做到这一点。
Here is one example using snprintf。
Here is another example using a length-limiting format string
要验证数组中所有字符(如果它们是以ASCII编码)是数字,您必须循环遍历每个字符并验证每个字符的整数值是否介于48和57之间('0' - '9')。