我正在尝试使用库函数找到字符串的长度。
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]!='\0';i++);
len=i;
length=strlen(card);
printf("%d %d",len,length);
但如果我输入一个16位数的卡号,则输出为16 17 但除此之外[卡号小于16位]两个输出都是一样的。 这是前后增量或其他一些因素的影响。 请解释一下。
答案 0 :(得分:2)
首先,对于16位数字,您需要更长的字符数组:
char card[17]; // 16 digits + `\0`
然后试试这个:
for(len=0; card[len] != '\0'; len++);
不要依赖于i
循环的价值。
答案 1 :(得分:0)
快速回答是使用fgets()
替换gets()
char *fgets(char *str, int n, FILE *stream)
n - 这是要读取的最大字符数(包括最终的空字符)。通常,使用以str传递的数组的长度。
使用函数gets()是不安全的,这可能导致堆栈溢出:)例如如果您想在卡中输入16位数的卡号[16],则无法放置' \ 0'。