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'.
我正在尝试使用库函数查找字符串的长度 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'.