post 并在 for 循环中预递增。 C中没有库函数的字符串长度

post and pre increment in for loop. string length without library function in C

我正在尝试使用库函数查找字符串的长度 w/o。

char card[16];                  //card number in char array.
unsigned int cardno[16]={0};    //card number in int array for calculations.

int i,length=0,len;
printf("Credit Card Number[without any spaces]: "); 
gets(card);

for(i=0;card[i]!='[=11=]';i++);
len=i;
length=strlen(card);

printf("%d %d",len,length);

但如果我输入 16 位卡号,则输出为 16 17 但除此之外[卡号小于 16 位] 两个输出是相同的。 这是 pre 和 post 增量的效果还是其他一些东西。 请解释。

首先,您需要一个更长的字符数组来表示 16 位数字:

char card[17];  // 16 digits + `[=10=]`  

然后试试这个:

for(len=0; card[len] != '[=11=]'; len++);

不要依赖i循环外的值。

快速的答案是使用 fgets() 替换 gets()

char *fgets(char *str, int n, FILE *stream)

n -- 这是要读取的最大字符数(包括最后的空字符)。通常,使用作为 str 传递的数组的长度。

使用函数 gets() 是不安全的,它可能会导致堆栈溢出 :) 例如如果你想在卡中输入16位卡号[16],没有地方可以放'\0'.