for循环中的post和pre增量。 C中没有库函数的字符串长度

时间:2015-06-18 06:31:56

标签: c post-increment pre-increment

我正在尝试使用库函数找到字符串的长度。

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位]两个输出都是一样的。 这是前后增量或其他一些因素的影响。 请解释一下。

2 个答案:

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