C编程 - 检查字符并停止阵列长度超过50个字符

时间:2013-12-15 03:19:56

标签: c arrays validation

嗨,我希望能够对我的结构'数据包'上的'数据'条目输入我的数据进行一些验证。

基本上它只能是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);

所有帮助都很有用,我提前感谢你。

3 个答案:

答案 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')。